Pour utiliser la réécriture d'URL, il faut utiliser les expressions régulières. C'est la base du truc. Une expression régulière est une syntaxe qui définit un masque pour identifier des chaînes de caractères. Si on reprend le besoin de deathart :
Accueil/Etape1 => index.php?Page=accueil&Etape=1
ou
Accueil/Etape/1 => index.php?Page=accueil&Etape=1
Pour l'exemple, on va oublier le fait que le mot Accueil s'écrit avec un A majuscule à gauche et un a minuscule à droite. Il faut que les valeurs soient les bonnes partout car c'est difficile de convertir des caractères avec mod_rewrite. Cela signifie que si la bonne URL finale doit être index.php?Page=accueil&Etape=1 avec un a minuscule, il faut que l'URL d'entrée contienne ce a minuscule (donc accueil/Etape1 ou accueil/Etape/1).
Bref, le truc, c'est d'essayer de voir comment on peut identifier les blocs colorés. Une fois qu'on a trouvé une façon de faire, ce sera très facile de construire les URL avec les paramètres par un jeu de références.
Dans le premier cas, Accueil est facile à repérer : c'est le premier groupe de caractères avant le premier /. Pour Etape et 1, c'est plus difficile. On voit qu'il y a un seul bloc de caractères (Etape1) qu'il faut couper en 2 alors qu'il n'y a pas de séparateur évident. On constate juste que 1 est un chiffre et Etape ne contient que des lettres. Ce sont des éléments qu'on sait facilement repérer avec des expressions régulières. On a donc l'approche suivante pour le premier cas :
(un premier groupe de caractères différents de /)/(des lettres)(des chiffres)
La question à laquelle je ne sait pas répondre c'est de savoir si c'est un masque d'URL fonctionnellement correct. Seul deathart peut répondre à la question. Si on suppose que oui, la façon d'écrire ça en expression régulière est la suivante :
^([^/]*)/([a-zA-Z]*)([0-9]*)$
Le tout premier caractère ^ indique le début de la chaîne de caractères à analyser et $ marque la fin de cette chaîne de caractères. [^/] signifie un caractère différent de /.
La règle de réécriture qui va avec est tout simplement :
RewriteRule ^([^/]*)/([a-zA-Z]*)([0-9]*)$ index.php?Page=$1&$2=$3 [L]
Les $1, $2 et $3 font tout simplement référence aux groupes de caractères entre parenthèses : $1 fait référence à ([^/]*) et ainsi de suite. * est un multiplicateur qui signifie "un nombre quelconque de fois (éventuellement 0) le caractère précédent".
Pour le second cas, c'est en fait plus simple car on peut utiliser le / comme séparateur. Cela donne le masque suivant :
(un premier groupe de caractères différents de /)/(un second groupe de caractères différents de /)/(le reste)
Comme vous avez suivi, vous savez immédiatement construire la RewriteRule qui va bien :
RewriteRule ^([^/]*)/([^/]*)/(.*)$ index.php?Page=$1&$2=$3 [L]
Le . dans (.*) signifie n'importe quel caractère.
Personnellement, cette réécriture, et donc les URL qui vont avec, est beaucoup plus simple et fiable que la première. Solution à privilégier.
Maintenant, le cas de tom.com. Ben même punition :
view_host-25_123.html => module1/show_content.php?obj=host-25&id=123
J'ai volontairement supprimé la partie monsite.com/ des URL à vérifier car c'est ce que mod_rewrite fait quand on l'utilise dans un .htaccess.
Là, on est dans le second cas précédent : on a des délimitateurs évidents, donc le masque est le suivant :
view_(un premier groupe de caractères différents de _)_(un second groupe de caractères différents de _).html
Et si vous avez suivi jusqu'ici, maintenant l'écriture de la RewriteRule est plus que triviale :
RewriteRule ^view_([^_]*)/([^_]*)\.html$ module1/show_content.php?obj=$1&id=$2 [L]
Vous noterez le \ devant le . pour que le . signifie vraiment le caractère . et pas n'importe quel caractère.
Partager