我需要有关需求的帮助。我们安装了 Apache 2.4.6
我有一个带有编码查询字符串的 URL:
https://example.com/home?testStr%3Dhello%26id%3Drad
我正在尝试找出如何使用 Apache Web 服务器中的 mod_rewrite 对 URL 的查询字符串部分进行双重编码,以便:
https://example.com/home?testStr%253Dhello%2526id%253Drad
这是我正在尝试解决的问题之一。
答案1
只是为了回应评论中的担忧……这是一个奇怪的要求。但是,您可以使用 mod_rewrite 来实现这一点。例如,尝试以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(testStr%3Dhello%26id%3Drad)$
RewriteRule ^/?(home)$ /$1?%1 [B,NE,R,L]
/home?testStr%3Dhello%26id%3Drad
这将发出一个从到/home?testStr%253Dhello%2526id%253Drad
(双重编码)的临时 (302) 重定向。
服务器QUERY_STRING
变量不是%解码的,因此您可以根据RewriteCond
指令中给出的文字查询字符串进行匹配。
反向$1
引用指的是RewriteRule
图案IE。home
。
反向%1
引用指的是最后匹配的捕获子模式条件模式(RewriteCond
指令),即 % 编码的查询字符串(testStr%3Dhello%26id%3Drad
)。
B
指令 %上的 (转义反向引用) 标志对反向RewriteRule
引用 ( %1
) 进行编码,以有效地对查询字符串进行双重编码。
(noescape)标志NE
可防止替代进一步 (三重) URL 编码!