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 ?