我正在定义mod_rewrite规则,如果请求的文件不存在,它将重写对我的/application.php的所有请求,否则不会进行任何重写。这很简单:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule .* application.php [PT]
代码只有一个问题。假设我有foo.html文件。请求如下:
http://example.com/foo.html/some/other/string
将出现404错误。 为什么呢?
答案 0 :(得分:0)
将出现404错误。为什么呢?
因为该URL不存在。它正在文件夹string
中查找文件/foo.html/some/other
,但它不存在。
您希望使用http://example.com/foo.html/some/other/string
URL结构利用的行为 - 将第一个条目视为文件名,将其余条目视为参数 - 称为"pathinfo"。它与mod_rewrite无关,但如果在Apache配置中启用以下内容,则可用:
AcceptPathInfo On
看起来该设置目前已转为“关闭”。
如果启用它,文件名后面的部分将可用于foo.html
- 在PHP中,它将在
$_SERVER["PATH_INFO"]
变量。
因为这个方法不需要重写模块是活动的,所以这有时被称为“穷人的mod_rewrite” - 它运行正常,但不像“真正的”重写那么灵活。