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] Améliorer la réécriture


Sujet :

Apache

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut [URL Rewriting] Améliorer la réécriture
    Bonjour,

    Je viens à vous car j'aimerais améliorer mes règles de ré écriture d'URL. Je souhaite faire cela, car récemment, en lesi nstallant sur une config, c'est complètement partit en vrille et j'ai pu constater que mes règles n'était certainement pas optimisées, ou en tout cas <peut mieu faire>.

    L'objectif de mes règles et d'attraper toutes les urls qui terminent par .html ou .html et de retrouscrire le chemin dans une variable.

    Exemple : http://www.monsite.com/toto.hml
    Résultat : http://www.monsite.com/index.php?chemin=toto.html

    Pour faire cela mes règles actuelles sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            RewriteEngine 	on
            RewriteRule 		^.*\.(css|js|jpg|jpeg|gif|swf|html|ico|pdf)$  -  [QSA,L]
            RewriteRule 		^/(.*)\.(htm|html)$ /index.php?chemin=$1.htm [QSA,L]
            RewriteRule 		^/(.*)$ /index.php?chemin=$1/no-index.htm [QSA,L]
    La première c'est un filtre sur les extensions classiques, pour soulager de suite le serveur. A ce propos si il est possible de la chinter avec une règles du style <Tout ce qui n'est pas .htm|.html>....
    La deuxième c'est easy c'est pour les urls qui se termine par un nomde page html
    La troisième c'est une règle pour les urls terminant sur un répertoire.

    Le gros souci que j'ai eu c'est que si j'ai une url du style /toto.html
    - 1 er passage, elle est transformée en /index.php?chemin=toto.htm
    - Puis un milliard de second passage où cela se transformé en quelque chose comme /index.php?chemin=index.php?chemin=index.php?chemin=index.php?chemin=toto.htm ect..

    bref mon modificateur L n'était que moyennement pris en compte....

    M'enfin ce que je souhaiterais surtout ce sont des rules de compétition rapide à executer. Car les miennes semblent boucler inutilement...


    Voilà,
    Merci d'avance pour vos idées et votre aide !

    bye

  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
    Par défaut
    Faut se méfier du L : il ne fait jamais vraiment ce qu'on pense qu'il fait. En fait, Apache va appeler plusieurs fois la série de RewriteRule jusqu'à converger vers une URL unique. Dans ton cas, tu passes une première fois sur ta seconde règle. Le L dit : "stop, on arrête cette première passe ici". Alors Apache recommence et là, il tombe sur ta 3ème règle et il recommence le tout encore une fois, etc.

    Le secret c'est de jouer avec des RewriteCond pour bien restreindre le périmètre des RewriteRule. Ta seconde règle est correcte car elle matche avec seulement les URL se finissant par .htm?. En revanche, ta 3ème règle est (beaucoup) trop large : elle matche pour tout. Faut donc en restreindre le périmètre avec un RewriteCond, genre un truc qui dit "quand c'est pas /index.php". Enfin, ton premier RewriteRule ne sert globalement à rien, c'est pas 2 règles bien précises qui vont planter les perfs D'où finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            RewriteEngine 	on
     
            RewriteRule ^/(.*)\.(htm|html)$ /index.php?chemin=$1.htm [QSA,L]
     
            RewriteCond %{REQUEST_URI} !/index.php$
            RewriteRule ^/(.*)$ /index.php?chemin=$1/no-index.htm [QSA,L]
    Mais à tester, j'ai fait ça à "main levée".

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    merci de ces explicaitons _Mac_.

    Par contre du coup, ne penses tu pas que j'ai tout de même besoin de la première rule.
    Celle sur les extensions à ne pas analyser.

    Car si je suis ce que tu me proposes avec toto.css.
    - La premiere rule est fausse, donc il n'applique pas
    - La rewriteCond est vrai, puisque ce n'est pas index.php
    - La troisème rewrite est vrai, aussi.

    Du coup je pense que je modifier la rewritecond ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} -d
    Car pour les répertoires l'arborescence est respectée.

    Cependant se pose la question du trailing slash... A vérifier.

    Ok. Merci pour tout _Mac_ ; )

    je mettrais résolu quand j'aurai le temps de vérifier !

    bye

  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
    Par défaut
    Autant pour moi, tu as raison pour les extensions non désirables pour la seconde règle mais ton RewriteCond %{REQUEST_URI} -d est bien mieux si tu veux effectivement limiter aux seuls répertoires.

    Pour le / terminal, tu devrais avoir un truc du genre dans l'URL réécrite : chemin=xxx//no-index.htm

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/03/2008, 20h00
  2. [URL Rewriting] problème de réécriture
    Par gtraxx dans le forum Apache
    Réponses: 7
    Dernier message: 24/02/2008, 12h19
  3. Réponses: 7
    Dernier message: 20/12/2007, 11h52
  4. [URL Rewriting] Réécriture et espaces
    Par iwf-fr dans le forum Apache
    Réponses: 5
    Dernier message: 02/09/2007, 14h33

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