我遇到了类似的问题,例如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
答案 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