我在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提供。
答案 0 :(得分:1)
我自己找到了答案。配置指令AllowEncodedSlashes
必须设置为on
才能生效。否则,当URL包含编码的正斜杠或反斜杠时,Apache将使用404进行响应。
http://httpd.apache.org/docs/2.0/mod/core.html#allowencodedslashes