/ / Mod Rewrite Ajout de paramètres de chaîne de requête, pas de remplacement - .htaccess, mod-rewrite, redirect, helicontech

Mod Rewrite Ajout de paramètres de chaîne de requête, ne pas remplacer - .htaccess, mod-rewrite, redirect, helicontech

J'essaie de générer une redirection externe qui implique quelques tâches spécifiques.

  1. Si une valeur de chaîne de requête spécifique est trouvée dans l'URL, redirigez.
  2. S'il est redirigé, remplacez l'un des noms de paramètre de chaîne de requête, mais pas sa valeur.
  3. 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 № 1

frappe 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]