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 :

[Htaccess] URL rewriting


Sujet :

Apache

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut [Htaccess] URL rewriting (non résolu !!)
    Bonjour,

    Je voudrais mettre en place un règle de réécriture d'URL simple. A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.com?module=xxx&action=yyy&id=zzz
    je voudrais afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monsite.com/xxx/yyy/zzz
    ou éventuellement
    monsite.com/xxx/yyy/zzz.html
    zzz est toujours un nombre.

    La .htaccess suivant ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <IfModule mode_rewrite.c>
    RewriteEngine on
    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ index.php?module=$1&action=$2&id=$3
    </IfModule>

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    A présent ça me donne une redirection vers la première URL. Comment faire en sorte que seule l'URL réécrite soit visible par l'internaute ?

  3. #3
    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
    "A présent" signifie quelle règle de réécriture ? Comme ça, là, je n'arrive pas à la deviner.

    La règle RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ index.php?module=$1&action=$2&id=$3 me semble correcte mais ne fonctionne pas avec les URL se terminant par .html. C'est uniquement des URL du type /aaa/bbb/123. Sinon, peut-être mettre un / devant index.php?... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=$1&action=$2&id=$3
    A essayer, j'ai pas testé.

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Mon .htaccess est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <IfModule mod_rewrite.c>
    	RewriteEngine On
    	RewriteRule ^([^-]+)/([^-]+)/([^-]+)/([0-9]+)$ /index.php?module=$1&controller=$2&action=$3&id=$4 [L,NC,NS]
    	RewriteRule ^([^-]+)/([^-]+)/([^-]+)$ /index.php?module=$1&controller=$2&action=$3 [L,NC,NS]
    	RewriteRule ^([^-]+)/([^-]+)$ /index.php?module=$1&action=$2 [L,NC,NS]
    	RewriteRule ^([^-]+)\.html$ /index.php?module=$1 [L,NC,NS]
    </IfModule>
    J'ai ajouté un étage entre temps mais le principe reste le même. Et j'obtiens une redirection au lieu d'une vraie réécriture d'URL.

  5. #5
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    Qu'entends-tu par "une vraie réecriture d'URL" ?

    Lorsque tu tapes monsite.com/xxx/yyy/zzz
    Cela redirige vers monsite.com?module=xxx&action=yyy&id=zzz

    L'adresse tapée est celle qui est visible dans la barre de navigation.
    Tu dois changer tous les liens précédemment monsite.com?module=xxx&action=yyy&id=zzz par monsite.com/xxx/yyy/zzz

    L'utilisateur ne verra jamais l'adresse monsite.com?module=xxx&action=yyy&id=zzz à moins qu'il ne connaisse le nom de tes pages, de tes paramètres, etc.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par Linaa Voir le message
    L'adresse tapée est celle qui est visible dans la barre de navigation.
    Tu dois changer tous les liens précédemment monsite.com?module=xxx&action=yyy&id=zzz par monsite.com/xxx/yyy/zzz

    L'utilisateur ne verra jamais l'adresse monsite.com?module=xxx&action=yyy&id=zzz à moins qu'il ne connaisse le nom de tes pages, de tes paramètres, etc.
    C'est justement ça qui ne fonctionne pas. Quand je tape monsite.com/xxx/yyy/zzz c'est monsite.com?module=xxx&action=yyy&id=zzz qui s'affiche.

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Ca ne fonctionne toujours pas. Comment utiliser l'URL rewriting avec Apache ?

  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
    C'est franchement bizarre car je viens de tester sur mon EasyPHP en faisant un copier-coller et sans rien modifier du tout : ça marche nickel ! /index.php fait un simple phpinfo et quand je fais http://localhost/xxx/yyy/zzz, j'ai ma page phpinfo avec QUERY_STRING = module=xxx&controller=yyy&action=zzz.

    Il fait quoi ton index.php ? Essaie comme moi avec un bête phpinfo dans ton index.php, pour voir.

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Si je ne mets pas le chemin complet du fichier, il ne trouve pas la page. Comment faire ?

  10. #10
    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
    De quel fichier parles-tu ? Peux-tu nous mettre tes règles de redirection et nous dire ce quelles URL ne passent pas ?

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    De quel fichier parles-tu ? Peux-tu nous mettre tes règles de redirection et nous dire ce quelles URL ne passent pas ?
    C'est le fichier que j'ai posté au-dessus. Le fichier dont je parle est le script index.php... Aucune règle ne fonctionne... De plus même avec le nom complet, j'ai un autre problème : Si je traite un formulaire, la variable $_POST est vide...

    Si je reprend tout depuis le début, mon besoin est simple : Je veux réécrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite.com/index.php?module=monmodule&controller=moncontroller&action=monaction&id=8
    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite.com/monmodule/moncontroller/monaction/8.html

  12. #12
    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
    Si on prend la règle RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ index.php?module=$1&action=$2&id=$3, c'est normal que ça ne passe pas avec l'URL http://monsite.com/monmodule/moncont...naction/8.html pour 2 raisons :
    • ta règles donne 3 tokens (([a-z]+), ([a-z]+) et ([0-9]+)) alors qu'il y en a 4 dans l'URL (il manque la partie en rouge) : http://monsite.com/monmodule/moncontroller/monaction/8.html
    • Comme je le disais au début, ton URL se termine en .html alors que ta règle dit que l'URL se termine par des chiffres.

    Il faut donc rajouter un ([a-z]+) pour "capter" l'action et rajouter un \.html pour finir de mapper l'URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)/([a-z]+)/([a-z]+)/([0-9]+)\.html$ index.php?module=$1&action=$2&id=$3

  13. #13
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Si on prend la règle RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ index.php?module=$1&action=$2&id=$3, c'est normal que ça ne passe pas avec l'URL http://monsite.com/monmodule/moncont...naction/8.html pour 2 raisons :
    • ta règles donne 3 tokens (([a-z]+), ([a-z]+) et ([0-9]+)) alors qu'il y en a 4 dans l'URL (il manque la partie en rouge) : http://monsite.com/monmodule/moncontroller/monaction/8.html
    • Comme je le disais au début, ton URL se termine en .html alors que ta règle dit que l'URL se termine par des chiffres.

    Il faut donc rajouter un ([a-z]+) pour "capter" l'action et rajouter un \.html pour finir de mapper l'URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)/([a-z]+)/([a-z]+)/([0-9]+)\.html$ index.php?module=$1&action=$2&id=$3
    Le problème n'est pas là. Pour l'instant je commence sans le .html qui est accessoire... La réécriture d'URL ne fonctionne pas correctement.
    1) Si je ne mets pas l'URL de remplacement complète, ça ne fonctionne pas du tout.
    2) Avec l'URL de remplacement complète, ça fonctionne mais pas correctement. J'écris http://monsite.com/monmodule/moncontroller/monaction/ dans la barre d'adresse de mon navigateur mais cette URL est remplacée par http://monsite.com/index.php?module=...ion=monaction/

  14. #14
    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
    Quel est ton .htaccess complet ? Il peut y avoir plein de règles qui rentrent en conflit les unes avec les autres. C'est potentiellement le cas par exemple avec la série de règles que tu donnais le 08/11/2007 à 22h58 (je ne dis pas que c'est ça le pb, je dis juste que le pb peut venir de là et qu'il faut étudier les effets de bord).

  15. #15
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Quel est ton .htaccess complet ? Il peut y avoir plein de règles qui rentrent en conflit les unes avec les autres. C'est potentiellement le cas par exemple avec la série de règles que tu donnais le 08/11/2007 à 22h58 (je ne dis pas que c'est ça le pb, je dis juste que le pb peut venir de là et qu'il faut étudier les effets de bord).
    Mon .htaccess complet est celui que j'ai posté plus haut.

  16. #16
    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
    D'ac, tu avais pu faire des modifs entre temps. Alors j'ai joué avec tes règles et bien sûr :
    Citation Envoyé par Développeur
    Chez moi, ça marche !
    Mon environnement : Wamp 2.0 (Apache 2.2)
    Dans www, j'ai un fichier index.php (donc URL http://localhost/index.php) qui fait juste phpinfo().
    Dans www, j'ai le .htaccess suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RewriteEngine on
     
    RewriteRule ^([^-]+)/([^-]+)/([^-]+)/([0-9]+)$ /index.php?module=$1&controller=$2&action=$3&id=$4 [L,NC,NS]
    RewriteRule ^([^-]+)/([^-]+)/([^-]+)$ /index.php?module=$1&controller=$2&action=$3 [L,NC,NS]
    RewriteRule ^([^-]+)/([^-]+)$ /index.php?module=$1&action=$2 [L,NC,NS]
    RewriteRule ^([^-]+)\.html$ /index.php?module=$1 [L,NC,NS]
    Modulo les <IfModule>, c'est texto ton .htaccess.
    J'ai testé les URL suivantes :

    Donc si ça ne marche pas chez toi de la même façon, c'est qu'il y a un autre problème.

  17. #17
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Cela fonctionne parfaitement chez mon hébergeur. Il s'agit donc d'un problème de configuration chez moi. J'aimerais donc savoir comment le configurer.

  18. #18
    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
    Faut que tu nous en dises plus : il se passe quoi chez toi ? Y a-t-il un message d'erreur quelque part, en particulier dans les logs d'Apache ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/03/2009, 16h33
  2. HTaccess URL Rewriting
    Par yonialhadeff dans le forum Apache
    Réponses: 1
    Dernier message: 01/09/2008, 13h51
  3. Si vous avez des questions sur Apache, HTAccess, URL rewriting avec Apache, etc
    Par Marc Lussac dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 28/08/2007, 19h09
  4. [HTAccess] URL rewriting
    Par actarus44 dans le forum Apache
    Réponses: 4
    Dernier message: 13/07/2005, 11h41
  5. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 20h18

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