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 :

RegEx dans la réécriture d'URL


Sujet :

Apache

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut RegEx dans la réécriture d'URL
    Bonjour,

    D'abord j'espère avoir posté dans la bonne section (mon "problème" concerne les expressions régulières dans les règles de réécriture d'URL).

    J'ai fait une règle de réécriture avec 3 paramètres, qui me parait correcte, mais qui me renvoie systématiquement une erreur 404.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([-a-z]*)/([-a-z]*)/([-a-z]*)$ /monfichier.php?param1=$1&param2=$2&param3=$3 [L]
    Les 3 paramètres doivent pouvoir comporter les lettres majuscules ou minuscules et le caractère tiret "-".

    - L'URL-rewriting marche sur mon serveur
    - Le mode correspondant est activé dans le php.ini
    - J'ai testé la même chose avec un seul paramètre et ça marche très bien
    - Version de PHP : 5.2.1

    Merci d'avance à tous ceux qui m'éclaireront sur le sujet.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, c'est bien là.

    As-tu mis un RewriteEngine on avant la règle ? Si tu as mis la règle dans un .htaccess, as-tu vérifié que les .htaccess sont autorisés et que tu peux y mettre des directives (AllowOverride all, en gros).

    Tu peux regarder dans les logs d'erreurs d'Apache ? Il devrait y avoir le chemin (réécrit, j'espère) qui provoque l'erreur 404.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse

    Oui j'ai bien mis ce qu'il fallait dans le .htaccess, et mon .htaccess est bien pris en compte, car ma règle de réécriture fonctionne avec UN paramètre (mais pas avec 3).

    Par contre pour les logs d'erreur d'Apache je n'y ai pas pensé, je vais voir ce que ça donne !

    Sinon ce sont peut-être mes slash qui séparent les 3 paramètre qui dérangent, je ne sais pas...

    Merci d'avance.

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par BenFett Voir le message
    Sinon ce sont peut-être mes slash qui séparent les 3 paramètre qui dérangent, je ne sais pas...
    Ca peut poser problème, en effet, surtout s'ils correspondent à de vrais répertoires, mais on devrait s'en sortir. A plus forte raison que
    Citation Envoyé par Développeur
    ça marche très bien chez moi
    avec EasyPHP, la règle que tu donnes dans ton premier message et l'URL http://localhost/titi/toto/tutu.

    Y a-t-il d'autres choses dans ton .htaccess ? Contrairement à ce qu'on peut croire, le [L] n'arrête pas totalement le traitement de mod_rewrite, ça arrête juste la boucle de réécriture en cours. Après, une autre boucle est lancée : mod_rewrite s'arrête de réécrire quand les URL ne sont plus réécrites.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse.

    Citation Envoyé par _Mac_
    Ca peut poser problème, en effet, surtout s'ils correspondent à de vrais répertoires
    Non les répertoires n'existent pas physiquement. Et si l'utilisateur saisit un mauvais paramètre (qui éventuellement pourrait correspondre à un vrai répertoire), il est redirigé sur une autre page.

    Voici mon log d'erreur Apache quand je met DEUX paramètres (c'est la même chose avec TROIS paramètres), qui n'est pas très explicite, à part me dire que le fichier n'existe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Tue Oct 28 16:46:52 2008] [error] [client 0.0.0.0] File does not exist: C:/dir_web/dir_project/param1
    [Tue Oct 28 16:46:52 2008] [error] [client 0.0.0.0] File does not exist: C:/dir_web/dir_project/erreurs
    0.0.0.0 - - [28/Oct/2008:16:46:52 +0100] "GET /param1/param2 HTTP/1.1" 404 -
    Citation Envoyé par _Mac_
    avec EasyPHP, la règle que tu donnes dans ton premier message et l'URL http://localhost/titi/toto/tutu.
    Oui c'est tout à fait exact, et c'est ce je souhaiterais avoir comme URL.

    Citation Envoyé par _Mac_
    Y a-t-il d'autres choses dans ton .htaccess ?
    Voilà l'intégralité de mon fichier .htaccess, je n'ai que la réécriture d'URL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Options +FollowSymlinks
    RewriteEngine on
     
    RewriteRule ^([-a-z]*)/?$ /monfichier.php?param1=$1 [L]
    RewriteRule ^([-a-z]*)/([-a-z]*)/?$ /monfichier.php?param1=$1&param2=$2 [L]
    RewriteRule ^([-a-z]*)/([-a-z]*)/([-a-z]*)/?$ /monfichier.php?param1=$1&param2=$2&param3=$3 [L]
    En fait il est possible de mettre seulement le 1er paramètre, ou alors le 1er et le 2ème paramètre, ou enfin les 3 paramètres.

    Pour ce qui est des [L], je ne savais pas exactement à quoi ca servait, merci pour tes explications Si j'ai bien compris, dans mon cas il faut que je le mette, non ?

    Merci d'avance.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, il faut mettre les [L] mais ce que je veux dire c'est que ça ne va pas forcément faire ce qu'on croit que ça va faire, à savoir interrompre totalement la réécriture d'URL : ça interrompt le cycle de réécriture en cours mais aussitôt après, un nouveau cycle est relancé, le but étant d'arriver à converger vers une URL qui ne peut plus être réécrite.

    En tout cas, ces 3 règles marchent nickel avec mon EasyPHP et les URL http://localhost/titi, http://localhost/titi/, http://localhost/titi/toto, http://localhost/titi/toto/, http://localhost/titi/toto/tutu et http://localhost/titi/toto/tutu/.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Oky j'ai compris le problème. En fait tous mes paramètres ont des tirets, et c'est ca qui ne fonctionne pas.

    Effectivement, j'ai essayé avec des paramètres sans tirets et ca fonctionne très bien...

    Dois-je abandonner le tiret ?

    Merci pour tout en tous cas

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux donner un exemple d'URL qui ne marche pas ? Au risque de te décevoir, http://localhost/ti-ti/toto/tutu marche super bien chez moi !!!

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. Réécriture d'URL dans VirtualHost
    Par Khleo dans le forum Apache
    Réponses: 1
    Dernier message: 02/01/2013, 21h40
  2. [RegEx] supprimer <a href...</a> par regex dans pages html.
    Par moldak dans le forum Langage
    Réponses: 10
    Dernier message: 15/11/2012, 16h02
  3. regex dans urls.py
    Par daroth dans le forum Django
    Réponses: 1
    Dernier message: 31/01/2009, 21h20
  4. (.*) dans une réécriture d'url
    Par Jayrome dans le forum Apache
    Réponses: 5
    Dernier message: 01/12/2008, 11h32
  5. Réécriture d'url dans fichier ASP
    Par Ishizaki dans le forum ASP
    Réponses: 1
    Dernier message: 22/02/2007, 11h44

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