Apache mod_rewrite RewriteRule处理HTML实体

Apache mod_rewrite RewriteRule处理HTML实体,apache,mod-rewrite,Apache,Mod Rewrite,出于某种原因,我们在包含HTML实体的URL上接收到大量入站流量 例如 http://www.ourdomain.com/index.php?key1=value1&键2=值2 我想创建一个重写规则来替换这些HTML实体(特别是用&)并将用户转发到正确的地址 我试过这些: 重写规则&;和[R=永久性] 及 重写规则&& 但什么都没有发生 (顺便说一句,我知道这是解决别人问题的一种可怕而危险的方式,但我只需要把它完成。暂时) 感谢您的帮助……要使任何重写工作正常,重写引擎必须处

出于某种原因,我们在包含HTML实体的URL上接收到大量入站流量

例如

http://www.ourdomain.com/index.php?key1=value1&键2=值2

我想创建一个重写规则来替换这些HTML实体(特别是用&)并将用户转发到正确的地址

我试过这些:

重写规则&;和[R=永久性]

重写规则&&

但什么都没有发生

(顺便说一句,我知道这是解决别人问题的一种可怕而危险的方式,但我只需要把它完成。暂时)


感谢您的帮助……

要使任何重写工作正常,重写引擎必须处于打开状态,但您可能已经修复了该问题:

# following statement must come before any other rewrite statements
# and must be enabled per virtual host configuration
RewriteEngine On
符号是一种特殊的元字符。显然,那些复制和粘贴你链接的人是在一个编辑器中复制和粘贴你的链接的,而这个编辑器最终逃过了符号,进入了
&
(或者,更准确地说,如果发生在a标签内部,则为
&;amp;
)。我不是100%确定,但我发现很可能应该逃逸符号,请尝试以下方法:

RewriteRule \& \&
要了解重写是如何进行的,它重写了什么以及为什么,您应该打开重写日志(确保Apache可以写入到
RewriteLog
)的位置:


其中级别9是最高的。

要使任何重写工作正常,重写引擎必须打开,但可能您已经修复了该问题:

# following statement must come before any other rewrite statements
# and must be enabled per virtual host configuration
RewriteEngine On
符号是一种特殊的元字符。显然,那些复制和粘贴你链接的人是在一个编辑器中复制和粘贴你的链接的,而这个编辑器最终逃过了符号,进入了
&
(或者,更准确地说,如果发生在a标签内部,则为
&;amp;
)。我不是100%确定,但我发现很可能应该逃逸符号,请尝试以下方法:

RewriteRule \& \&
要了解重写是如何进行的,它重写了什么以及为什么,您应该打开重写日志(确保Apache可以写入到
RewriteLog
)的位置:


其中第9级是最高的。

这应该可以做到

RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)&(.*)
RewriteRule .* /index.php?%1&%2 [N,R=301]
这本质上说,

  • 是否有
    &在查询字符串中
  • 如果是,则匹配前后的所有内容,然后用
    &
  • 规则中的
    N
    标志实际上表示“继续执行此操作,直到条件不再匹配”

查看,包括和。

这应该可以做到

RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)&(.*)
RewriteRule .* /index.php?%1&%2 [N,R=301]
这本质上说,

  • 是否有
    &在查询字符串中
  • 如果是,则匹配前后的所有内容,然后用
    &
  • 规则中的
    N
    标志实际上表示“继续执行此操作,直到条件不再匹配”

查看,包括和。

我发现了它不起作用的原因:重写规则未应用于URL的查询字符串部分。。。我试图找到是否可以重新编写查询字符串部分,但看起来不太可能…我想我已经找到了它不起作用的原因:重写规则没有应用到URL的查询字符串部分。。。我试图找到是否有可能重新编写查询字符串部分,但看起来不太可能…谢谢,工作得很好。做了我想做的。谢谢,做得很好。做了我想做的事。