Apache .htaccess在url包含编码正斜杠时被忽略
我在Apache中遇到了一些非常奇怪的行为。我有一个标准的“让PHP处理所有不是文件或目录的事情”重写设置Apache .htaccess在url包含编码正斜杠时被忽略,apache,mod-rewrite,Apache,Mod Rewrite,我在Apache中遇到了一些非常奇怪的行为。我有一个标准的“让PHP处理所有不是文件或目录的事情”重写设置 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] 除URL包含编码的正斜杠(/)的%2F时,此选项按预期工作。无论何时发生这种情况,Apache都会以404响应,这是合乎逻辑的,因为这些路径都不存在。但我
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
除URL包含编码的正斜杠(/)的%2F
时,此选项按预期工作。无论何时发生这种情况,Apache都会以404响应,这是合乎逻辑的,因为这些路径都不存在。但我不明白的是,为什么我的.htaccess
中的重写规则被忽略了
TL;博士
GET/Foo/bar/baz
由我的PHP脚本提供
GET/Foo/bar%2Fbaz
由Apache提供。自己找到了答案。config指令allowencodedslass
必须设置为on
才能工作。否则,当URL包含编码的正斜杠或反斜杠时,Apache将以404响应
这看起来像是一种不好的默认行为。在URI方案中,只有区分
%2F
和/
才有意义,因为该保留字符将用于其他特殊用途。这将是一个例外,而不是规则,当应用程序中出现这样的方案时,用法很可能出现在URL的查询部分,后面是?
字符。