重写规则&在URL中转义(编码)正斜杠

时间:2013-03-19 10:48:36

标签: .htaccess mod-rewrite url-rewriting

我开发了这个RewriteRule,它一直运行良好,直到我发现了一个问题。

这是规则:

 RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/(.*)$
 RewriteCond %{DOCUMENT_ROOT}/%1/%2/%4.php -f
 RewriteRule ^ /%1/%2/%4.php?id=%3 [QSA,L]

URL格式如下:/ home / service / ID / scriptname 请注意, ID 是动态的,并且在检查文件是否存在时,RewriteRule不会使用它。

但在我发现的这一个场景中,我使用的其中一个ID包含'%2F' - 解码后转换为正斜杠(/) - 由于某种原因,在休息时重写规则因为它认为还有另一个目录。

我的问题是,为什么%2F在RewriteRule中被解码,我该如何设计解决方案? - 最好不要快速破解或更改ID。

1 个答案:

答案 0 :(得分:2)

我认为您需要在重写规则中添加 B 标志,如下所示:

RewriteRule ^ /%1/%2/%4.php?id=%3 [QSA,L,B]

查看此link以获取更多信息。