Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
795 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  URL rewriting et expressions régulières

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

URL rewriting et expressions régulières

n°1664192
Meishan
Posté le 31-12-2007 à 00:42:42  profilanswer
 

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 ! :)

mood
Publicité
Posté le 31-12-2007 à 00:42:42  profilanswer
 

n°1664197
Meishan
Posté le 31-12-2007 à 01:25:58  profilanswer
 

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
n°1664430
kfman
Credo quia absurdum
Posté le 01-01-2008 à 15:12:57  profilanswer
 

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
n°1664503
Meishan
Posté le 01-01-2008 à 20:03:17  profilanswer
 

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

n°1664506
kfman
Credo quia absurdum
Posté le 01-01-2008 à 20:06:06  profilanswer
 

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
n°1664511
Meishan
Posté le 01-01-2008 à 20:31:05  profilanswer
 

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 !

n°1664515
kfman
Credo quia absurdum
Posté le 01-01-2008 à 20:40:20  profilanswer
 

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
n°1664522
Meishan
Posté le 01-01-2008 à 21:13:54  profilanswer
 

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

n°1675165
jolly
Posté le 22-01-2008 à 16:09:18  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  URL rewriting et expressions régulières

 

Sujets relatifs
URL pour s'identifier directement aux services iGoogle[Résolu] ndd.net/includes/print.php en ndd.net/print.php
Récupéré et stoquer dans un fichier log les URL visitésprobléme avec recupération de variable GET avec URL rewrite
Syntaxe Lien relatif Excelgestionnaire d'expressions mathématiques
probleme expressions regulieres phpProblème avec l'URL Rewriting.
Plus de sujets relatifs à : URL rewriting et expressions régulières


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR