从.htaccess中的查询字符串中删除特殊字符

时间:2014-10-17 13:44:05

标签: .htaccess mod-rewrite

我遇到了类似的问题,例如this one,并在mod_rewrite tutorials上找到了类似的说明。

我已经确定我需要一些符合

的内容
RewriteRule ^(.*)<(.*)$ /$1$2 [L,R=301]
RewriteRule ^(.*)>(.*)$ /$1$2 [L,R=301]

这适用于http://domain.com/<>,但 不适用于http://domain.com?a=<>

我在尝试从查询字符串中删除这些字符时添加了以下内容:

RewriteCond %{QUERY_STRING} ^(.*)<(.*)$
RewriteRule ^(.*)$ /$1?%1%2 [L,R=301]
RewriteCond %{QUERY_STRING} ^(.*)>(.*)$
RewriteRule ^(.*)$ /$1?%1%2 [L,R=301]

这没有改变任何事情。我也试过逃避&lt;和&gt;在正则表达式中(即^(.*)\<(.*)$)。

我想要达到的最终结果是

http://domain.com/<whatever>转为http://domain.com/whatever

http://domain.com/a=<whatever>&b=whatever变成http://domain.com/a=whatever&b=whatever

1 个答案:

答案 0 :(得分:2)

<编码为%3C>被浏览器编码为%3E。所以你的规则是这样的:

RewriteCond %{QUERY_STRING} ^(.*?)(?:%3C|%3E)(.*)$
RewriteRule ^(.*)$ /$1?%1%2 [L,R=302,NE]

这会将http://domain.com/?a=<whatever>&b=whatever重定向到http://domain.com/?a=whatever&b=whatever