Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 为不同的请求\u URI获取相同的请求\u文件名_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess 为不同的请求\u URI获取相同的请求\u文件名

.htaccess 为不同的请求\u URI获取相同的请求\u文件名,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,对mod_重写有一个奇怪的问题 像/news这样的URI将正确匹配,因为存在news.php。但是,/news/1900-01-01/title将匹配,就像它是/news一样 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ #workaround for URIs

对mod_重写有一个奇怪的问题

/news
这样的URI将正确匹配,因为存在
news.php
。但是,
/news/1900-01-01/title
将匹配,就像它是
/news
一样

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$ #workaround for URIs ending in a slash passing the previous check
RewriteRule ^(.*)$ debug.php?page=$1.php&req_filename=%{REQUEST_FILENAME}&req_uri=%{REQUEST_URI} [L]
如果使用
/news
运行,则会产生预期结果:

page=/news.php
req_filename=/home/domain/public_html/news
req_uri=/news
如果使用
/news/1900-01-01/title
运行,则会生成:

page=/news/1900-01-01/title.php
req_filename=/home/domain/public_html/news
req_uri=/news/1900-01-01/title
为什么两者的
%{REQUEST\u FILENAME}
相同


我已经有了一个关于新闻项目的工作;移动了
RewriteRule^news/([0-9]{4}-[0-9]{2}-[0-9]{2})/([a-zA-Z0-9\-]+)$news item.php?日期=$1,标题=$2[L]
。但是,我想了解2个唯一的URI如何解析为同一个不存在的文件(脚本添加了.php)。

Apache尝试查找最低的“真实”目录,然后处理与该目录对应的指令(例如,htaccess或其他特定于目录的指令)。在您的情况下,我假定URI与任何实际目录都不对应。Apache然后使用内容协商,如果设置了Multiviews(我怀疑您的情况就是这样),那么它会根据文件名找到最佳匹配。因为您有一个news.php,所以它与此匹配。如果您想了解更多信息,可以查看解释关键字内容协商和多视图的页面。

Apache尝试查找最低的“真实”目录,然后处理与该目录对应的指令(例如,htaccess或其他特定于目录的指令)。在您的情况下,我假定URI与任何实际目录都不对应。Apache然后使用内容协商,如果设置了Multiviews(我怀疑您的情况就是这样),那么它会根据文件名找到最佳匹配。因为您有一个news.php,所以它与此匹配。如果您想了解更多信息,您可以查阅解释关键词内容协商和Multivews的页面。

谢谢。这在文档中并不清楚。我不确定服务器的完整配置。客户端的网站位于共享托管服务器上。谢谢。这在文档中并不清楚。我不确定服务器的完整配置。客户端的网站位于共享托管服务器上。