apache 2.4 - 对 URL 中已编码的查询字符串进行双重编码

apache 2.4 - 对 URL 中已编码的查询字符串进行双重编码

我需要有关需求的帮助。我们安装了 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 编码!

相关内容