我有一个 apache 重写规则:
RewriteRule ^/xy[/]{0,1}$ https://www.example.com/path/file.php?utm_source=Billboard&utm_medium=Print&utm_campaign=MyOrg%20Promo&utm_term=2020FA&utm_context=XY%2C%20border%20state%20abbreviation%20redirect [R]
但我的目标网址实际上正在变成:
https://www.example.com/path/file.php?utm_source=Billboard&utm_medium=Print&utm_campaign=MyOrg0Promo&utm_term=2020FA&utm_context=XYC0border0state0abbreviation0redirect
因此,它正在剥离%2
目标查询字符串中的部分十六进制代码。
我尝试设置 PT、B、NE、QSD 和 BNP 标志。我在 Apache 2.4.6(CentOS) 上,那里不支持 BNP 标志。
我怎样才能让 Apache 不理会这些代码?
因为
%2
是mod_rewrite替换字符串中的反向引用,否则它将引用最后匹配的CondPattern中的第二个捕获的子模式。您发布的示例中没有,因此将其替换为空字符串-因此看起来它只是“剥离”。对于任何序列
%n
(其中n
为 0-9),您需要反斜杠转义%
以否定其特殊含义。例如。\%20
或者,使用
+
而不是%20
转义查询字符串中的文字空格。您将需要 上的
NE
标志RewriteRule
来防止查询字符串被双重转义。(而且您可能也应该使用该L
标志。)