我有一个 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 不再管这些代码呢?
答案1
因为%2
是反向引用在 mod_rewrite 中代换字符串,否则将引用最后匹配的第二个捕获的子模式条件模式。您发布的示例中没有,因此将其替换为空字符串 - 因此看起来它只是被“剥离”了。
对于任何序列%n
(其中n
为 0-9),您需要使用反斜杠转义来%
否定其特殊含义。例如。\%20
或者,使用+
而不是 来%20
转义查询字符串中的文字空格。
您将需要NE
标志来RewriteRule
防止查询字符串被双重转义。(并且您可能L
也应该使用该标志。)