Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 20h13   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 14
Points : 10
Points : 10
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 :
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 ?
absurdsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 22h51   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 280
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 280
Points : 8 568
Points : 8 568
A mon avis, le problème vient de la 3ème ligne du code que tu donnes :
Code :
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.
__________________

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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2011, 21h44   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 14
Points : 10
Points : 10
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.
absurdsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h22.


 
 
 
 
Partenaires

Hébergement Web