2

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

4

1 回答 1

1

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

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

检查此链接以获取更多信息。

于 2013-03-19T11:39:41.510 回答