У меня есть 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]
Но мой целевой URL на самом деле становится:
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 substitution, это в противном случае ссылалось бы на второй захваченный подшаблон в последнем сопоставленном CondPattern . В опубликованном вами примере его нет, поэтому он заменен пустой строкой - так что он выглядит так, как будто он просто «разделен».
Для любой последовательности %n
(где n
равно 0-9) необходимо экранировать %
обратной косой чертой, чтобы свести на нет его особое значение. т.е. \%20
Или используйте +
вместо %20
, чтобы избежать литеральных пробелов в строке запроса.
Вам понадобится флаг NE
в RewriteRule
, чтобы предотвратить двойное экранирование строки запроса. (Возможно, вам также следует использовать флаг L
.)