Apache-2.4
為什麼我的 Apache RewriteRule 會從目標 url 查詢字元串中刪除十六進制程式碼?
我有一個 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
標誌。)