J’ai une URL: http://example.org/abc?a=1&b=2 (la chaîne de requête est variable).
Je veux le redirect vers l’URL suivante en utilisant mod_rewite: http://example.org/test.php?url=abc%3Fa%3D1%26b%3D2 (la chaîne de requête est échappée).
Je ne veux pas que l’URL devienne: http://example.org/test.php?url=abc&a=1&b=2 ,
quel est ce que j’obtiens quand j’utilise: RewriteRule ^(abc) test.php?url=$1 [QSA]
.
J’ai aussi essayé:
RewriteCond %{THE_REQUEST} ^[AZ]+\ ([^\s]+) RewriteRule ^(abc) test.php?url=%1
mais en vain. Aucune suggestion?
Vous devez utiliser l’ B (escape backreferences)
pour ceci:
RewriteCond %{THE_REQUEST} \s/+(\S+)\sHTTP [NC] RewriteRule ^abc/?$ test.php?url=%1 [L,NC,B]
Ensuite, vérifiez la valeur de $_SERVER["QUERY_STRING"]
, qui sera affichée comme $_SERVER["QUERY_STRING"]
:
url=abc%3fa%3d1%26b%3d2
Je l’ai fait comme ça, similaire à @anubhava:
RewriteCond %{QUERY_STRING} (.*) RewriteRule ^(abc) test.php?url=$1\%3F%1 [B]
$ 1 est abc
,% 3F est ?
,% 1 est la chaîne de requête, toutes échappées à l’aide de l’indicateur B