Comment redirect une URL de requête complète avec une chaîne de requête échappée?

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