Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess在url包含编码正斜杠时被忽略_Apache_Mod Rewrite - Fatal编程技术网

Apache .htaccess在url包含编码正斜杠时被忽略

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响应,这是合乎逻辑的,因为这些路径都不存在。但我

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

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的查询部分,后面是
字符。