我开发了这个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]
点击此链接获取更多信息