如何使用转义查询字符串重定向完整的请求URL?

时间:2016-02-29 21:44:38

标签: regex apache .htaccess mod-rewrite

我有一个网址:http://example.org/abc?a=1&b=2(查询字符串是可变的)。

我想使用mod_rewite将其重定向到以下网址:http://example.org/test.php?url=abc%3Fa%3D1%26b%3D2(查询字符串已转义)。

希望网址变为:http://example.org/test.php?url=abc&a=1&b=2

这是我使用时获得的:RewriteRule ^(abc) test.php?url=$1 [QSA]

我也尝试过:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ ([^\s]+)
RewriteRule ^(abc) test.php?url=%1

但无济于事。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您需要使用B (escape backreferences) flag

RewriteCond %{THE_REQUEST} \s/+(\S+)\sHTTP [NC]
RewriteRule ^abc/?$ test.php?url=%1 [L,NC,B]

然后检查$_SERVER["QUERY_STRING"]的值,该值将显示为:

url=abc%3fa%3d1%26b%3d2

答案 1 :(得分:0)

我是这样做的,类似于@anubhava:

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(abc) test.php?url=$1\%3F%1 [B]

$ 1为abc,%3F为?,%1为查询字符串,均使用B标记进行转义。