Navigation

Toutes les catégories

Voir les derniers articles

Apache – Mettre en place des RewriteRules comprenant des paramètres

Si vous souhaitez mettre en place des RewriteRules contenant des paramètres, il vous faudra passer des RewriteCond ou par le drapeau QSA. En effet, une URI pour Apache s´arrête...

Logo Apache

Si vous souhaitez mettre en place des RewriteRules contenant des paramètres, il vous faudra passer des RewriteCond ou par le drapeau QSA.

En effet, une URI pour Apache s´arrête après l´extension de fichier.  Le ? détermine la fin de celle-ci, et le début de ce qu´on appelle la Query String, chaine de variables.

Le mod_rewrite ne permet pas de modifier cela depuis une rewriteRule. Mais on peux y accéder par deux moyens :

  1. si on veux juste faire suivre cette chaine, il faut un drapeau [QSA] a la fin de toutes tes règles par lesquelles ton url va passer.
  2. si on veux modifier ta query string, tu dois faire une rewriteCond et mettre en motif tes possibilités de variables, la query string est :
    RewriteCond %{QUERY_STRING} nomvar=([0-9]+)  puis appelle ce motif par les variables serveurs % : RewriteRule ^url1$ url2 ?autrenom= %1  où %1 sera le résultat de ta variable…

Dans la pratique cela donne :

On veut rediriger test.php ?p=ok&n=0 sur test-tout-va-bien.html et test.php ?p=ok&n=1 vers test-tout-est-revenu.html

Nous allons donc tester la valeur de n pour savoir sur quelle page redirigée :

[bash]

RewriteCond %{QUERY_STRING} n=0

RewriteRule ^/test\.php /test-tout-va-bien.html [R=301, L]

RewriteCond %{QUERY_STRING} n=1

RewriteRule ^/test\.php /test-tout-est-revenu.html [R=301, L]

[/bash]

Cependant cette technique n’est pas parfaite car en vrai elle redirigera avec les paramètres. Cela donnera dans notre exemple :

test.php ?p=ok&n=0 sur test-tout-va-bien.html ?p=ok&n=0 et test.php ?p=ok&n=1 vers test-tout-est-revenu.html ?p=ok&n=1

Pour ma part je trouve ce fonctionnement un peu lourd et hasardeux… Je n’ai pas réussi à simplement échapper le caractère « ? ». De plus, les paramètres suivent la requête… Je suis donc preneur d’une meilleure solution.

Afficher les commentaires (2)

Commentaires

  • Riette40

    Hum, pas d’après la doc Apache pourtant. Si on veut ajouter des variables aux variables existantes, alors on utilise le flag [QSA]. Mais sinon, la doc indique bien que l’on remplace le query string :
    •’qsappend|QSA’ (query string append)
    This flag forces the rewrite engine to append a query string part of the substitution string to the existing string, instead of replacing it. Use this when you want to add more data to the query string via a rewrite rule.
    extrait de : http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

    • Anonyme

      Oui effectivement j’ai refais un truc plus optimisé en utilisant ce flag que je ne connaissais pas. Merci d’avoir remonté l’info, j’ai oublié de modifier 🙂

Newsletter WebActus

Abonnez-vous pour recevoir notre sélection des meilleurs articles directement dans votre boîte mail.

Nous ne partagerons pas votre adresse e-mail.

Articles similaires

Webmarketing

5 formations pour lancer votre boutique en ligne

Vous souhaitez lancer votre commerce en ligne mais vous ne savez pas comment vous y prendre ? Voici 5 formations pour apprendre à créer et gérer votre...

Publié le par Cyrielle Maurice
Webmarketing

[Infographie] – La force de vente de l’iPad

Il y a deux semaines, Apple a annoncé la sortie de la nouvelle version de sa célèbre tablette tactile. J’ai nommé l’iPad 2. Aujourd’hui, ces nouveaux terminaux...

Publié le par Team WebActus