我有一个网址: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
但无济于事。有什么建议吗?
答案 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
标记进行转义。