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 qui marche trop bien


Sujet :

Apache

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut URL rewriting qui marche trop bien
    Bonjour,

    Pour ma page acces.php, j'aimerais transformer mes get en "dossier" et supprimer acces.php de l'url.
    Exemple:
    Transformer: acces.php?cat=images&titre=faire-ce-truc-avec-des-images
    En: images/faire-ce-truc-avec-des-images

    Voici le code essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    Le soucis: Toutes les pages contenues dans tous les dossiers après ce htaccess prend l'interface de acces.php, donc à la place de m'afficher la page normalement, ça m'affiche le contenu de acces.php quelque soit la page.

    Je ne vois pas le probleme. Merci pour votre aide

  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
    C'est juste que ton filtre (premier paramètre de RewriteRule) est trop générique. Il faut juste mettre un filtre plus précis. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^acces/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    et tu utilises des URL comme celle-ci : http://xxx.com/acces/images/faire-ce...vec-des-images

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse

    Le probleme est que je voudrais une url de ce type: http://xxx.com/images/faire-ce-truc-avec-des-images
    Est-ce possible?

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    et:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    sans succès

  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
    On me peut pas mettre de ^/ au début dans un .htaccess ; s'il n'y en avait pas dans mon exemple, c'était volontaire. Une règle comme celle-ci dans un .htaccess ne marchera jamais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    Et une règle comme celle-ci ne matchera que les URL du type http://xxx.com/nimportequoi/abcd/tagada123 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule /([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    On en revient toujours à la même chose : avoir un filtre pertinent, précis, pas trop "large". Donc c'est comme tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^images/([a-z0-9-]+) acces.php?cat=images&titre=$2
    ou encore un truc comme l'exemple que j'ai donné, mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
    qui est beaucoup trop large, comme tu le constates.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Je vois bien le probleme mais la catégorie et le titre changent à chaque page. Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^images/([a-z0-9-]+) acces.php?cat=images&titre=$2
    n'est malheureusement pas utilisable.
    Exemple: l'url peut devenir "nomdusite.com/php/faire-ca-en-php" ou "nomdusite.com/images/faire-ce-truc-avec-des-images".

    J'espère que j'explique bien

    Merci pour tes réponses

  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
    Je comprends bien mais les possibilités sont limitées.

    Est-ce que cette règle marche mieux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
    Si ça ne change rien, peux-tu nous dire dans quels cas tu veux et ne veux pas rediriger vers acces.php ? Comment sais-tu, toi, que telle URL doit aller vers acces.php et pas telle autre ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Cela semble bien mieux marcher, apparemment les autres pages n'ont plus l'interface de acces.php.

    J'ai changé le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
    en:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    car "images" peut changer .

    Au fait je souhaite réécrire l'url pour la simplifier, rien de plus. Donc toutes les url passant par acces.php doivent se réécrire comme je l'ai indiqué ci-dessus.
    Le but est qu'en donnant: nomdusite.com/php/faire-ca-en-php, le traitement se fasse par acces.php?cat=php&titre=faire-ca-en-php.

    Pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_FILENAME} !-f
    améliore le code? Quel est son rôle?

    Merci pour ton aide, j'étais bien bloqué

  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
    Citation Envoyé par sam1212 Voir le message
    car "images" peut changer .
    En effet C'est ça quand on ne maîtrise pas la puissance du copier-coller.

    Citation Envoyé par sam1212 Voir le message
    Pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_FILENAME} !-f
    améliore le code? Quel est son rôle?
    Ben c'est pour dire d'exécuter la RewriteRule qui suit si ce qu'on demande ne correspond pas déjà à un fichier existant (-f).

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    D'accord donc si je comprends bien, avant la règle réécrivait tout, même les pages n'ayant pas acces.php dans l'url, là avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_FILENAME} !-f
    on vérifie si le fichier n'existe pas avant et donc on ne réécrit pas l'url?

  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
    C'est bien ça.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Ok merci

    Est-ce que je peux reprendre ce code pour rajouter une règle pour une page telechargement.php?
    Faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1
    Pour avoir "nomdusite.com/telechargement/truc123" à la place de "nomdusite.com/telechargement.php?doss=telechargement&nom=truc123"?

    Est-ce que ça marche ou je n'ai pas bien compris.

    Merci pour ton aide

  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
    Ca marchera mais à condition de mettre la règle sur telechargement.php avant la règle sur acces.php car le filtre sur telechargement est incluse dans celle de acces, et comme Apache exécute les règles dans l'ordre du fichier, ce sera acces.php qui sera toujours activé. Je te conseille également de mettre le flag [L] pour limiter au maximum les effets de bord.

    Ca donnne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Merci pour la modif et pour l'explication

    Par contre je ne comprends toujours pas pourquoi toutes les pages sont touchées lors de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
    Normalement ça devrait affecter que les pages acces.php non?

    Pour la correction que tu m'as proposé, faut-il que je mette:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_FILENAME} !-f
    tout en haut?

    Donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]
    suffit?

    Merci

  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
    Essayer ce que j'ai suggéré ne suffit pas ? As-tu au moins essayé ? Pourquoi veux-tu que j'écrive quelque chose qui ne serait pas dans le bon ordre ? Je maintiens la configuration que je donne.

    Pour la première question sur le filtre, je ne peux que t'encourager à relire la discussion depuis le début : un filtre ^([a-z]+)/([a-z0-9-]+) est trop large (i.e. fonctionne pour autre chose que les pages que tu veux rediriger vers acces.php), c'est pour ça qu'on a ajouté une condition.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Oula je posais seulement une question pas de quoi s'emballer comme ça...
    Pour acces.php il y avait besoin alors pourquoi pas là (maintenant j'ai compris pour l'histoire du filtre trop large).

    Je mets en résolu et pas d'inquiétude je ne reviendrais plus poser de questions.

    Merci toutefois pour ton aide et tes explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. URL Rewriting qui marche a moitié
    Par Nhymphea dans le forum Langages serveur
    Réponses: 1
    Dernier message: 07/11/2011, 15h49
  2. Authentification via Tomcat qui marche trop bien !?
    Par ghohm dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 04/05/2009, 11h30
  3. URL rewriting qui ne marche pas
    Par TallyHo dans le forum Apache
    Réponses: 2
    Dernier message: 06/04/2009, 12h50
  4. Encore un URL Rewriting qui ne marche pas
    Par fabrisss dans le forum Apache
    Réponses: 3
    Dernier message: 10/07/2007, 16h12
  5. Réponses: 5
    Dernier message: 02/10/2006, 19h24

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