Apache-2.4

為什麼我的 Apache RewriteRule 會從目標 url 查詢字元串中刪除十六進制程式碼?

  • April 21, 2022

我有一個 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標誌。)

引用自:https://serverfault.com/questions/1036018