adn Posté 14 Juillet 2006 Posté 14 Juillet 2006 Bonjour, J'ai des pages qui sont nommées ainsi: A-B-C.phpA-B-C1-C2.phpetc... et je veux les reecrire en C.php?s=BC1-C2.php?s=Betc... J'applique la regle RewriteRule ^A-(.*)-(.*)\.php$ $2.php?s=$1 [L] Mais dans le cas ou j'ai C1-C2 , çà ne marche pas, pour quelle raison ? Je contourne mon problème en faisant : RewriteRule ^A-(.*)-(.*)-(.*)-(.*)-(.*)\.php$ $2-$3-$4-$5.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)-(.*)-(.*)\.php$ $2-$3-$4.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)-(.*)\.php$ $2-$3.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)\.php$ $2.php?s=$1 [L] Mais ce n'est pas satisfaisant
Dan Posté 14 Juillet 2006 Posté 14 Juillet 2006 Dans le cas de A-B-C1-C2 tu as 3 parties variables, et ta règle n'en considère que deux... donc le premier (.*) va englober le plus possible de caractères, donc (B-C1) Il faut faire précéder ta règle par une autre, qui dirait ceci: RewriteRule ^A-(.+)-(.+)-(.+)\.php$ $2-$3.php?s=$1 [L] Accessoirement j'ai remplacé tes * par le signe + ... vu que tu as au moins un caractère. Tu devrais aussi remplacer le (.*) par ([^-]+) pour éviter "d'avaler" les - en cas de problème
adn Posté 14 Juillet 2006 Auteur Posté 14 Juillet 2006 Oui en fait c'est ce que j'ai fait (cf mon message précédent, tu as du répondre pendant que je le modifiais ) RewriteRule ^A-(.*)-(.*)-(.*)-(.*)-(.*)\.php$ $2-$3-$4-$5.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)-(.*)-(.*)\.php$ $2-$3-$4.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)-(.*)\.php$ $2-$3.php?s=$1 [L]RewriteRule ^A-(.*)-(.*)\.php$ $2.php?s=$1 [L] Je trouvais pas cette solution intellectuellement satisfaisante. Je me disais qu'il y avait peut-être moyen de lui dire d'englober d'abord à droite plutôt qu'a gauche ? Merci pour ta réponse rapide
TheRec Posté 14 Juillet 2006 Posté 14 Juillet 2006 Qu'entends tu par "ça ne marche pas" (essaie au moins de dire ce qui se passe, une erreur 404 ?, il charge une autre page que ce que tu souhaites ?, ...) ? Dans ta règle tu prévois une partie fixe et 2 paramètres séparés par des traits d'union ... lorsque tu essaie d'utiliser une URL comme "A-B-C1-C2.php" tu as un trait d'union de plus... le moteur d'expression régulière est gourmand (et le mod_rewrite ne permet pas de modifier ce comportement, contrairement à PHP par exemple)... Tu utilises (.*) il va prendre le deuxième trait d'union comme faisant partie de ton premier paramètre ... et le deuxième paramètre sera "C2" (toujours avec l'exemple "A-B-C1-C2.php")... Pour changer ce comportement je te propose cette règle : RewriteRule ^a-([^-]+)-(.+)\.php$ $2.php?s=$1 [L] Ainsi ton premier paramètre ne DOIT par comprendre un trait d'union...et le deuxième paramètre lui peu en comprendre un si nécessaire. En espérant avoir compris ce que tu voulais dire par "ça ne marche pas" Bonne continuation. EDIT : Bon j'arrive après la tempête... Pardon.
Dan Posté 14 Juillet 2006 Posté 14 Juillet 2006 Je te suggère de lire l'article sur la réécriture récursive. Tu auras une solution pour un nombre indéfini de variables à réécrire. L'URL est: http://www.webmaster-hub.com/publication/article15.html
adn Posté 14 Juillet 2006 Auteur Posté 14 Juillet 2006 Un grand merci à vous deux Effectivement ce qui me manquait TheRec c'est : ([^-]+) Pour l'empêcher de globaliser sur B-C1 comme le signalait Dan, il suffit de lui dire qu'il n'y a pas de "-" Super, mon code est maintenant plus propre !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant