URL rewriting et expressions régulières

URL rewriting et expressions régulières - Divers - Programmation

Marsh Posté le 31-12-2007 à 00:42:42    

Bonjour à tous,
 
Je mets actuellement en place un système d'URL rewriting de façon à assurer une gestion multilangue propre de MediaWiki (utilisation d'un unique dossier de fichiers mais de plusieurs bases de données avec certaines tables en commun), mais il s'avère qu'une règle pose problème.
 
Il s'agit de :

Code :
  1. RewriteRule ^fr/(.+)$ /wiki/$1&lang=fr
  2. RewriteRule ^en/(.+)$ /wiki/$1&lang=fr


 
J'aimerais que les URL du type wiki/fr/{n'importe quoi} soient transformées en wiki/{n'importe quoi}&lang=fr et de même pour les pages en anglais.
 
Et pourtant, le code ci-dessous ne fonctionne pas du tout, à en juger par l'erreur 404. Ce n'est pas un problème avec le mod rewrite, puisque toutes les règles situées plus haut fonctionnent. Par ailleurs, le problème n'est pas lié au règles sus-dites, puisqu'en les enlevant cela ne change rien. De plus, ce n'est pas un problème lié aux répertoires, puisque les règles plus haut sont basées sur la même architecture (ex : RewriteRule ^fr/images/(.+)$ /wiki/images/$1). Enfin, le problème n'est pas lié à la finalité de la manœuvre puisque la « substring » nommée ici {n'importe quoi} correspond en fait toujours à une URL de la forme index.php?title=Machin ou index.php?title=Truc&chose=bidule, enfin bref, l'utilisation du & se justifie et n'est pas la cause de l'erreur 404.
 
Ayant épuisé toutes les explications qui me sont venues à l'esprit, je me permets donc de solliciter votre aide.  
 
En espérant vous avoir fourni assez d'informations pour traiter ce casse-tête, je vous remercie d'avance de votre réponse ! :)

Reply

Marsh Posté le 31-12-2007 à 00:42:42   

Reply

Marsh Posté le 31-12-2007 à 01:25:58    

Salut,
 
J'ai essayé, mais sans succès. De plus, es-tu certain qu'il faille échapper les slashes ? Toutes les autres règles fonctionnent, et pourtant, sans avoir le faire (ex : RewriteRule ^fr/images/(.+)$ /wiki/images/$1).
 
J'ajoute également que le code suivant fonctionne :

Code :
  1. RewriteRule ^fr/(.+)$ /wiki/$1
  2. RewriteRule ^en/(.+)$ /wiki/$1


Mais évidemment, je perds l'information de la langue, donc exit... Bref, je ne comprends pas comment ce &lang=fr peut faire foirer la règle...


Message édité par Meishan le 31-12-2007 à 03:08:17
Reply

Marsh Posté le 01-01-2008 à 15:12:57    

C'est pas plutôt:
 

Code :
  1. RewriteRule ^fr/(.+)$ /wiki/$1?lang=fr
  2. RewriteRule ^en/(.+)$ /wiki/$1?lang=en


 
Avec ? à la place du &
Et si lang n'est pas le premier paramètre, il y a peut-être le ? ou & à gérer.


Message édité par kfman le 01-01-2008 à 15:14:50

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 01-01-2008 à 20:03:17    

En fait, lang n'est jamais le premier paramètre, d'où l'utilisation du point d'interrogation =\

Reply

Marsh Posté le 01-01-2008 à 20:06:06    

Meishan a écrit :

En fait, lang n'est jamais le premier paramètre, d'où l'utilisation du point d'interrogation =\


Du & tu veux dire ?
Sinon t'as testé une "requête cible" à la main pour voir si ça marche ?


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 01-01-2008 à 20:31:05    

Oui, c'est bien ce que je voulais dire ^^
 
Si tu veux dire par là mettre l'URL absolue comme destination de la règle pour avoir une redirection, eh bien cela amenait à une inversion de "$1" et de "?lang=fr".
 
Cependant, je viens de contourner le problème en utilisant des cookies pour stocker la langue dans ce cas précis.
 
Mais apparemment, la poisse ne va pas me laisser m'en tirer comme ça, puisque le premier problème de l'année vient de pointer son nez :)
 
Je veux cette fois effectuer un rewriting sur les URL du type wiki/fr/Special:Search?{paramètres} de façon à ce qu'elles pointent sur /wiki/index.php?{paramètres}
 
Cependant, aucune des règles suivantes ne fonctionne :

Code :
  1. RewriteRule ^fr/Special:Search(.+) /wiki/index.php$1 [L]
  2. ou
  3. RewriteRule ^fr/Special:Search\?(.+) /wiki/index.php?$1 [L]


Essayant de comprendre d'où cela venait, j'ai remplacé la cible du rewriting par une image bidon (de façon à m'assurer que ça fonctionnait), et je me suis rendu compte que les URL à réécrire n'étaient pas reconnues par les regex ci-dessus. Par exemple, wiki/fr/Special:Search?search=miaou&fulltext=Search ne fait l'objet d'aucun rewriting.
 
J'ai cependant noté que la regex ^fr/Special:Searc(.+) (j'ai enlevé le h) marchait, elle. J'ai l'impression que la présence du point d'interrogation juste à la fin du mot Search fait foirer les autres règles, mais je n'ai aucune idée de la façon de régler ce problème.
 
Si jamais quelqu'un pouvait m'apporter son aide, je l'en remercie !

Reply

Marsh Posté le 01-01-2008 à 20:40:20    

Meishan a écrit :

Oui, c'est bien ce que je voulais dire ^^
 
Si tu veux dire par là mettre l'URL absolue comme destination de la règle pour avoir une redirection, eh bien cela amenait à une inversion de "$1" et de "?lang=fr".
 


Non je veux dire: en rentrant directement l'url (à la main) comme après url rewriting dans la barre d'adresse ça fonctionne ?


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 01-01-2008 à 21:13:54    

Bien sûr, ça fonctionne parfaitement... Mais c'est maintenant le second problème qui bloque le développement =\

Reply

Marsh Posté le 22-01-2008 à 16:09:18    

ca serai pas plutot ca :  
   1. RewriteRule ^wiki/fr/(.+)$ /wiki/$1&lang=fr
   2. RewriteRule ^wiki/en/(.+)$ /wiki/$1&lang=fr

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed