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

Instagram aurait dû refuser l’offre de Facebook !

L’offre de Facebook n’est arrivée sur la table des patrons d’Instagram que ces derniers jours… Elle a donc été acceptée ultra-rapidement et a permis à Marc...

Publié le par Team WebActus
Webmarketing

Interview : le quotidien d’un développeur chez PrestaShop

Découvrez le quotidien de Jonathan, développeur Core à PrestaShop ! The post Interview : le quotidien d’un développeur chez PrestaShop...

Publié le par Flavien Chantrel