Apache2重写,查询字符串转义两次

gas*_*ard 9 apache mod-rewrite query-string

在虚拟主机配置文件中使用此规则会导致查询参数的双重转义:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

例如:

http://example.com?f=hello%20world
Run Code Online (Sandbox Code Playgroud)

导致

https://example.com?f=hello%2520world
Run Code Online (Sandbox Code Playgroud)

请注意"%25"转义为"%"符号.为什么会这样?

reg*_*ero 17

尝试在重写规则的末尾添加[NE](noescape)标记:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NE]
Run Code Online (Sandbox Code Playgroud)

这是因为&?和其他一些默认情况下,在改写过程中逃脱.