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 :

rewriting et redirection


Sujet :

Apache

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut rewriting et redirection
    Bonjour,

    J'ai mis en place récemment une réécriture d'url sur mon site.

    Étant encore en train de le développer, les liens internes au site sont toujours de la forme mapage.php?param1=xx&param2=xx...

    Via htaccess j'ai redirigé mes différents de façon à ce que l'url soit en format réécrite (http://www.monsite.fr/param1/param2/...)

    Tout fonctionne correctement sauf une page.

    Cette page peut accepter 3 ou 4 paramètres.

    Elle est de cette forme :

    mapage.php?param1=xx&param2=xx&param3=xx

    ou

    mapage.php?param1=xx&param2=xx&param3=xx&param4=xx

    Le paramètre 4 dépend du paramètre 3. Suivant la valeur du paramètre 3 on a besoin du paramètre 4 ou pas.

    Coté htaccess maintenant.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{REQUEST_FILENAME} ^(.+)/mapage.php$
    RewriteCond %{QUERY_STRING} ^param1=(.*)&param2=(.*)&param3=(.*)$
    RewriteRule mapage.php /url_du_site/%2/%1/mapage/%3/? [R=301,L]
    RewriteRule ^([a-z]+)/([a-z]+)/mapage/([a-z]+)/?$ mapage.php?param1=$2&param2=$1&param3=$3&internal_redirect=1 [L,QSA]
     
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{REQUEST_FILENAME} ^(.+)/mapage.php$
    RewriteCond %{QUERY_STRING} ^param1=(.*)&param2=(.*)&param3=(.*)&param4=(.*)$
    RewriteRule mapage.php /url_du_site/%2/%1/mapage/%3/%4/? [R=301,L]
    RewriteRule ^([a-z]+)/([a-z]+)/mapage/([a-z]+)/([0-9]+)/?$ mapage.php?param1=$2&param2=$1&param3=$3&param4=$4&internal_redirect=1 [L,QSA]
    Pour information, en ce qui concerne "internal_redirect" dans le htaccess, ce n'est qu'une condition permettant de différencier l'url renseignée dans le navigateur de celle réécrite et redirigée par apache.
    Astuce trouver sur le forum ici


    Bien sur si j'enlève une des deux règles, l'autre fonctionne.

    Une idée pour supprimer ce conflit ?

  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
    A mon avis, le problème vient de la 3ème ligne du code que tu donnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{QUERY_STRING} ^param1=(.*)&param2=(.*)&param3=(.*)$
    Le dernier (.*) est trop large car il matche la chaîne param3=...&param4=...

    Tu as plusieurs façons de résoudre le problème comme par exemple utiliser un filtre plus précis que .*. Mais la solution la plus simple est d'inverser tes deux groupes de règles pour mettre celui réécrivant avec 4 paramètres avant celui avec 3 paramètres.

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Effectivement, l'ordre de mes conditions posait problème.
    Et associé à une erreur dans mon code j'étais pas prêt de trouver .

    En tout cas merci bien.

    Et sympa l'astuce "internal_redirect", bien trouvée.

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

Discussions similaires

  1. URL Rewriting et redirection : comment allier les deux ?
    Par Benamour Jr dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2010, 16h47
  2. [URL rewriting] Mauvaises redirections
    Par pascal64 dans le forum Apache
    Réponses: 2
    Dernier message: 04/03/2010, 15h23
  3. [URL rewriting] la redirection ne fonctionne pas
    Par jobo13 dans le forum Apache
    Réponses: 2
    Dernier message: 08/03/2009, 18h51
  4. URL rewriting et redirect
    Par niccam dans le forum Apache
    Réponses: 2
    Dernier message: 10/05/2008, 10h19
  5. Réponses: 2
    Dernier message: 29/11/2007, 18h41

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