我开发了这个 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。