IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[Url Rewriting] Réécrire la partie query string


Sujet :

Apache

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [Url Rewriting] Réécrire la partie query string
    bonsoir,

    Voila je me lance dans l'url rewriting mais a vrai dire j'ai un peu du mal.

    Je voudrai transformer : essai.php?date=23/11/2007 en essai.php?23/11/2007

    Donc j'utilise cette ligne :
    RewriteRule ^essais.php?([0-9]+)/([0-9]+)/([0-9]+)$ /test/essai.php?date=$1/$2/$3

    et donc quand je tape dans mon url essai.php?23/11/2007 bé quand j'affiche la variable $_GET['date'] elle n'est égale a rien

    comment faire pour que le ? ne soit pas pris comme instruction de la regex ?

    une petite idée ^^

    merci a vous tous

  2. #2
    Membre régulier Avatar de randimby
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 72
    Points
    72
    Par défaut Query String Appended
    Ajoutes [QSA] en fin de la ligne RewriteRule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^essai.php?([0-9]+/[0-9]+/[0-9]+)$ /test/essai.php?date=$1 [QSA]
    Attention à l'orthographe, dans ton code tu as mis essais.php

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Je n'ai aucun résultat randimby par contre si je remple le ? pas un - cela marche je n'y comprend rien

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    La partie query string ne se traite pas avec RewriteRule mais avec RewriteCond car seule la partie chemin de l'URL est "transmise" à RewriteRule. Il faudrait donc écrire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^(\d{2}/\d{2}/\d{4})$
    RewriteRule ^essai.php$ /test/essai.php?date=%1
    Par contre le test sur la partie query string est ici stricte. A vous d'adapter si besoin.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci julp, mais melheureusement je ne comprend rien pourrais tu me donner un liens pour apprendre ces différents Rewrite et savoir comment ils fonctionnent ??

    merci d'avance

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je tente de vous le réexpliquer autrement, par un exemple et de manière succincte. Soit l'URL http://www.developpez.net/forums/ind...val1&var2=val2

    Dans toute URL on distingue plusieurs parties :
    • le scheme (protocole), par rapport à l'exemple : http
    • le port : 80 (par défaut)
    • le nom ou adresse du serveur : www.developpez.net
    • le chemin : /forums/index.php
    • la partie query string (paramètres et valeurs) : var1=val1&var2=val2


    La directive RewriteRule ne s'applique qu'à la partie chemin (située après l'adresse IP ou le nom de domaine et avant la partie dite query string). Pour tester toute autre partie de l'URL, il faut se tourner vers la directive RewriteCond dont le premier argument est (généralement) la variable à tester. Apache prédéfinit un certain nombre de variables (+/- la spécification CGI) que vous pouvez retrouver en PHP dans le tableau $_SERVER ou en affichant un phpinfo (certaines concernant le client). Ainsi %{QUERY_STRING} représente donc la partie qui nous intéressait initialement. Et on aurait utilisé %{HTTP_HOST} pour, par exemple, tester le nom de serveur utilisé pour nous joindre (puisque plusieurs noms peuvent pointer sur un seul et même site).

    Attention cependant, il y a une subtilité au niveau du chemin et de la directive RewriteRule lorsque l'on place sa règle dans un fichier .htaccess. En effet, le serveur débarrassera le chemin de l'arborescence (si je puis dire) suivie avant de faire appel à cette directive. En somme, si vous avez placé un fichier .htaccess dans le sous-répertoire forums (par rapport à la racine web et pour reprendre l'exemple précédent) et que vous faites de la réécriture, le début du chemin de la requête (/forums/) sera tronqué.

    En ce qui concerne les expressions régulières c'est la syntaxe PCRE (Perl) qu'utilise Apache, vous pourrez aisément trouver maintes tutoriels sur le sujet. Par contre pour faire référence à une capture d'une directive RewriteRule on utilise la notation $X alors qu'avec RewriteCond il s'agit de %X.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2010, 10h24
  2. Réponses: 5
    Dernier message: 26/02/2010, 23h37
  3. Réponses: 1
    Dernier message: 09/11/2009, 22h31
  4. Réponses: 3
    Dernier message: 08/03/2009, 10h58
  5. Réponses: 11
    Dernier message: 17/01/2008, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo