Url rewriting et ordre des paramètres GET transmis

WRInaute discret
Bonjour,

J'essaye de mettre en place la solution décrite dans ce tutoriel pour une utilisation multilingue d'un site mais je bute sur un problème très précis et, peut-être, tout simple à résoudre. J'ai simplifé le .htaccess pour isoler le problème (j'ai pris pratiquement le même que dans le tuto) :

Code:
RewriteRule ^(.*)-l([0-9]*)(.*)\.html$  $1$3.php?ln=$2 [QSA]
RewriteRule ^(.*)-L([0-9]*)\.php$  $1.php?ln=$2 [L,QSA]

Le problème est que lorsque je veux passer une url du type http://test.ch/test/page23-l1-L2.html la variable $_GET['ln'] est égale à 1 au lieu d'être égale à 2.

En fait ma réecriture d'URL me renvoies page23.php?ln=2&ln=1 au lieu de page23.php?ln=1&ln=2 étant donné que le paramètre déterminant est le 2ème, d'après mes observations.

Donc la question : est-ce que l'ordre des paramètres identiques joue un rôle, est-ce que la règle de réecriture devrait être écrite différement ou est-ce un paramètres du serveur à modifier?
(je précise encore que mon hébergeur est infomaniak).

Merci d'avance pour votre/vos réponse(s).
 
WRInaute impliqué
RewriteRule ^(.*)-l([0-9]*)(.*)\.html$ $1$3.php?ln=$2 [QSA]
RewriteRule ^(.*)-L([0-9]*)\.php$ $1.php?ln=$2 [L,QSA]


Le problème est que lorsque je veux passer une url du type http://test.ch/test/page23-l1-L2.html

Donc ça fait ça:
http://test.ch/test/page23-l1-L2.html ->
http://test.ch/test/page23-L2.php?ln=1 ->
http://test.ch/test/page23.php?ln=2&ln=1
Pourquoi??
Parce que le moteur de réécriture inérprête les instruction dans l´ordre:
1/ il réécrit et donne http://test.ch/test/page23.php?ln=2
2/ il rajoute la Query String (QSA) et donne http://test.ch/test/page23.php?ln=2&ln=1

Soit tu enlève QSA, soit tu change le nom de ta deuxième variable GET...
 
WRInaute discret
Merci correiaj pour ta réponse.

Effectivemment les 2 solutions seraient enviseageables mais j'ai ommis de préciser dans mon ennoncé du problème que la plupart des mes liens sont du style :

http://test.ch/test/page23-l1.html

Donc si je change mon paramètre ln il ne fonctionnera plus avec un lien qui ne contient pas le changement de langue (Lx). Tout comme d'ailleurs si je supprime la Query String (QSA) le paramètre l1 ne deviendra jamais ?ln=1.

pour résumer :
http://test.ch/test/page23-l1.html devrait donner un $_GET['ln'] égal à 1
et
http://test.ch/test/page23-l1-L2.html devrait donner un $_GET['ln'] égal à 2


Donc est-ce que l'exemple est mal exprimé dans le tutorial ou ai-je fait une grossière erreur? D'après ce que dit correiaj, qui me semble très logique, l'exemple donné ne pourra jamais fonctionner correctement. Qu'en est-il?
 
WRInaute discret
Si je reprends le tutoriel il donne ceci comme exemple :

Par exemple, le fichier page23-l1-L2.html sera réécrit une première fois page23-L2.php?language=1 (1ère règle) puis page23.php?language=1&language=2 (2ème règle).

Ce qui est faux puisque j'obtiens en réalité page23.php?language=2&language=1 ce que correiaj a parfaitement démontré.

Alors la question : qu'est-ce que je fais de faux pour ne pas obtenir le même résultat que le tutoriel?
 
Discussions similaires
Haut