出于某种原因,我们在包含HTML实体的网址上收到大量入站流量。
E.g。
http://www.ourdomain.com/index.php?key1=value1&key2=value2
我想创建一个RewriteRule来替换这些HTML实体(特别是& amp;和&),并将人们转发到更正后的地址。
我试过这些:
RewriteRule & & [R=permanent]
和
RewriteRule & &
但没有发生任何事情。
(顺便说一句。我知道这是解决别人问题的一种可怕而危险的方法,但我只需要暂时完成它。)
感谢您的帮助......
答案 0 :(得分:4)
这应该可以解决问题;
RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)&(.*)
RewriteRule .* /index.php?%1&%2 [N,R=301]
这基本上是说;
&
?&
N
标志有效地说'继续这样做直到条件不再匹配'答案 1 :(得分:0)
对于任何重写工作,重写引擎必须打开,但也许你已经修复了:
# following statement must come before any other rewrite statements
# and must be enabled per virtual host configuration
RewriteEngine On
<&amp;&符号是一种特殊的元字符。显然,已复制并粘贴链接的人在编辑器内进行了编辑,该编辑器最终将&符号转换为&
(或者,技术上更正确,&amp;
如果它发生在a-tag内)。我不是百分百肯定,但我发现它可能会被转义,试试这个:
RewriteRule \& \&
要了解重写的方式,重写的内容以及原因,您应该重写日志(确保Apache可以写入RewriteLog
的位置):
RewriteLog "somepath.log"
RewriteLogLevel 3
其中9级是最高的。