在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这一页。