重写规则和转义(编码)URL中的正斜杠



我开发了这个rewriterrule,它一直工作得很好,直到我发现一个问题。

这里的规则是:

 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在rewriterrule中被解码,我如何设计一个解决方案?-最好不是快速破解或更改ID。

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

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

点击此链接获取更多信息

最新更新