-
Tiret et rewriting
Bonjour,
J'utilise actuellement cette règle pour réécrire mes urls
Code:
RewriteRule ^video/([-a-z0-9]*)-([-_a-zA-Z0-9]+)$ /index.php?media=video&rewrite=$1&code=$2 [L]
Tout marche bien, sauf que lorsque la $2 contient un tiret, la variable GET se trouve amputée de tous les caractères précédant.
le tiret contenu dans $2 est interprété comme un séparateur alors qu'il ne l'est pas.
-
C'est à cause du * dans le premier groupe de parenthèses. L'expression dans son ensemble n'est pas assez "stricte" pour indiquer clairement à Apache où commence justement $2. Tout ce que dit ton expression c'est que le dernier groupe peut contenir un - mais pas nécessairement et est précédé par un -. Vu comme ça, sachant qu'il y a une * dans le premier groupe, Apache va traiter en priorité ce * en mettant un maximum de caractères dans $1 pour ne garder que le dernier - comme séparateur de $2. C'est le comportement par défaut du parseur qui explique qu'on peut mettre simplement (.*) pour récupérer toute l'URL sans le ^ devant et le $ à la fin (^(.*)$).
Bref, revoie la syntaxe de ton expression pour dire à Apache comment clairement identifier $1 et $2 : - comme simple séparateur, vu qu'il est à la foins dans l'expression de $1 et de $2, n'est pas suffisant.