L'URL Rewriting avec Apache, pour de belles adresses Les expressions régulières, en quête des chaines de caractères

Les expressions régulières permettent de rechercher des chaines de caractères variables.

Caractères spéciaux

Certains caractères des expressions régulières portent un sens particulier :

 ^ : indique que nous sommes en début de ligne, ou au début de la chaîne de caractères. Cependant, entre crochets, la signification est différente,
 $ : indique lui que nous sommes en fin de ligne, ou de chaîne,
 . : remplace tout caractère inconnu,
 \ : échape un caractère utilisé dans la syntaxe regex. Par exemple, pour utiliser un point, la syntaxe est \..

Les classes de caractères servent à rechercher un des caractères parmi un ensemble

Ainsi, pour rechercher la chaine index.html, l'expression régulière à utiliser est ^index\.html$, Apache n'appliquera alors pas la règle si l'adresse demandée est quelquechose-index.html ou encore index.html-autrechose.

Les classes de caractères

Les classes de caractères servent à rechercher un des caractères parmi un ensemble, une classe s'écrit entre crochets. Voici quelques exemples de classes :

 [éèê] : signifie que l'on cherche le caractère é, ou è ou encore ê,
 [a-z] : signifie que l'on cherche n'importe quelle lettre en minuscules,
 [a-zA-Z] : signifie que l'on cherche n'importe quelle lettre, il est possible de faire des combinaisons plus plus personnelles, par exemple [a-gA-Gn-zN-Z] signifie que l'on cherche une lettre comprise entre a et g et entre n et z,
 [0-9] : signifie donc que l'on cherche un chiffre,
 enfin, il est possible de rechercher n'importe quel caractère sauf certains en ajoutant le caractère ^ en début de classe : [^a-zA-Z] signifie que l'on recherche tout caractère n'étant pas une lettre.

Les captures


Vous pouvez avoir besoin de réutiliser certaines informations de l'adresse recherchée pour indiquer l'adresse réelle de votre page, par exemple, pour remplacer glossaire-a.html en glossaire.php?lettre=a. on utilise alors les parenthèses de capture (). Ainsi, chaque extrait de la chaine trouvée entre () pourra être utilisée dans l'adresse de remplacement avec une variable numérotée $n (où n correspond au numéro de la capture).

Par exemple :

 1. RewriteRule ^glossaire-([a-z])\.html$ glossaire.php?lettre=$1

Les quantificateurs

Les quantificateurs permettent d'indiquer la répétition d'un caractère

Les quantificateurs permettent d'indiquer la répétition d'un caractère, c'est-à-dire le nombre de fois où on souhaite les retrouver.

Voici les principaux quantificateurs :

 ? : 0 ou 1 caractère (c'est-à-dire que le caractère n'est pas obligatoire),
 * : 0 ou plusieurs caractères (le caractère peut ne pas être trouvé ou trouvé un nombre infini de fois à la suite),
  + : 1 ou plusieurs caractères (le caractère doit être trouvé, mais le nombre de fois à la suite n'a pas d'importance),
  : le caractère doit être trouvé exactement n fois,
  {n,m} : le caractère doit être trouvé entre n et m fois,
 {n,} : le caractère doit être trouvé n fois ou plus.

Voici quelques exemples d'utilisation :

 index\.html? : on recherche index.htm ou index.html,
 .+\.html$ : on recherche n'importe quelle adresse dont l'extension est .html,
 glossaire-[a-z]+\.html : cette fois, notre adresse peut être utilisées pour plusieurs lettres (par exemple, glossaire-aa.html).

L'alternative


Le dernier caractère dont nous allons parler est |, il signifie "ou" quand il est utiliser à l'intérieur d'une capture, par exemple (index|home|accueil)\.html permet de rechercher index.html, home.html ou accueil.html.


Lire aussi :
- Utiliser $_GET pour avoir de bonnes URL pour le SEO