当url包含编码的正斜杠时,忽略.htaccess

时间:2012-03-12 14:36:51

标签: apache mod-rewrite

我在Apache遇到了一些非常奇怪的行为。我有一个标准的“让PHP处理所有不是文件或目录的内容”重写设置。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

当URL包含%2F(编码的正斜杠(/))时,这将按预期之外的方式工作。每当发生这种情况时,Apache会以404响应,这是合乎逻辑的,因为这些路径都不存在。但是我无法理解的是,为什么我的.htaccess中的重写规则被忽略了。

TL; DR

GET /Foo/bar/baz由我的PHP脚本

提供

GET /Foo/bar%2Fbaz由Apache提供。

1 个答案:

答案 0 :(得分:1)

我自己找到了答案。配置指令AllowEncodedSlashes必须设置为on才能生效。否则,当URL包含编码的正斜杠或反斜杠时,Apache将使用404进行响应。

http://httpd.apache.org/docs/2.0/mod/core.html#allowencodedslashes