如何使 . 在 apache 配置中全部匹配?

如何使 . 在 apache 配置中全部匹配?

在httpd.conf中:

 rewriterule  ^questions/([0-9]+).*  ...

匹配/questions/1674/<textarea>,但不匹配/questions/1674/<textarea><%2Ftextarea>

答案1

如果 URI 中有一个编码的正斜杠,Apache 将立即返回 404。错误日志将显示以下内容:

[信息] [客户端 1.2.3.4] 在 URI(解码='/question/1/')中发现 %2f(编码为 '/'),返回 404

为了解决这个问题,请在 httpd.conf 根目录或<VirtualHost>部分中添加以下指令:

AllowEncodedSlashes On

然后你的重写就可以正常工作了。Apache 手册中的信息如下:

AllowEncodedSlashes 指令允许使用包含编码路径分隔符(在相应系统上,/ 为 %2F,\ 为 %5C)的 URL。通常,此类 URL 会被拒绝,并出现 404(未找到)错误。

有关详细信息,请参阅:For more information, see:

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

http://blog.dynom.nl/archives/Apaches-fail-with-encoded-slashes_20090625_40.html

答案2

也许你需要在规则上添加 No Escape [NE] 标志?在以下位置搜索 noescape这一页

相关内容