Apache如何处理其中包含百分比编码的URL的path?

我遇到了一个意外的情况,Apache给了我一个404错误,而不是让mod_rewrite处理path,当一个百分比编码的path部分本身是一个HTTP URL。

例如“GET / myfolder / http%3A%2F%2Flocalhost%2Fnotify HTTP / 1.0”

我在/myfolder/.htaccess文件中有一个非常简单的规则,它将/ myfolder /中的文件中的所有内容发送到脚本。 它可以很好地处理其他百分比编码的值,但在这种情况下,Apache从不处理.htaccess文件中的RewriteRule。 我可以将该值作为解决方法进行双重编码,但似乎Apache仍然应该处理mod_rewrite阶段。 我打算只将URL作为脚本的input参数。

这里是/ irfolder/.htaccess中的(ir)相关的mod_rewrite指令:

RewriteCond %{REQUEST_FILENAME} !-s RewriteRule .* ./script-the-world.php 

重写规则不被处理。 在服务器configuration我有RewriteLogLevel 5等,尾-f /var/log/http/rewrite.log显示/ myfolder /正在被重写的所有我的请求…除了上面提到的一个。 我的意思是说在上面的特例中有内在的事情发生,但我不知道它是什么。 我希望有人可能知道另一个模块正在干扰我正在努力完成的任务。

这是Apache 2.2.16。

您需要启用AllowEncodedSlashes ,这将导致Apache允许其中包含%2F和%5C的URL,而不是抛出404。您当然仍然必须确保您的php脚本正在处理解码正确的URL,因为这不是Apache的职责。