现有文件的mod_rewrite规则

时间:2011-12-10 15:30:05

标签: apache mod-rewrite

我正在定义mod_rewrite规则,如果请求的文件不存在,它将重写对我的/application.php的所有请求,否则不会进行任何重写。这很简单:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule .* application.php [PT]

代码只有一个问题。假设我有foo.html文件。请求如下:

http://example.com/foo.html/some/other/string

将出现404错误。 为什么呢?

1 个答案:

答案 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” - 它运行正常,但不像“真正的”重写那么灵活。