J'essaie de générer une redirection externe qui implique quelques tâches spécifiques.
- Si une valeur de chaîne de requête spécifique est trouvée dans l'URL, redirigez.
- S'il est redirigé, remplacez l'un des noms de paramètre de chaîne de requête, mais pas sa valeur.
- Si # 1 est faux, ignorez la réécriture et continuez
Exemple: j'ai l'url http://foobar.com/?a=123&b=456&c=blah
Tout d'abord, si le paramètre c = blah
, rediriger vers http://barfoo.com/
Deuxièmement, remplacez a
avec x
paramètre de sorte que l'URL finale est http://barfoo.com/?x=123&b=456&c=blah
Voici ma meilleure estimation jusqu'à présent après des recherches sur http://mod-rewrite-cheatsheet.com/ et Fonctionnalités cachées de mod_rewrite
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.foobar.com$ [NC]
RewriteCond %{QUERY_STRING} ^a=(.*)&b=(.*)&c=blah$ [NC]
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,QSA,R=301]
Cependant, l'URL ajoute la chaîne de requête et non la remplace.
Je suis redirigé vers http://barfoo.com/?x=123&b=456&c=blah&a=123&b=456&c=blah
Réponses:
0 pour la réponse № 1frappe le front
Enlever QSA
des drapeaux a résolu le problème. QSA
signifie "ajouter la chaîne de requête existante à la règle de réécriture actuelle." Il ignore les nouveaux paramètres de chaîne de requête que vous ajoutez.
Je pensais qu'il était nécessaire d'avoir des paramètres de chaîne de requête pour la règle de réécriture elle-même.
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,R=301]