L'URL Rewriting

Les serveurs Apache permettent (si l'option est activée) de réécrire les URL.
Cela peut être utile avec un site dynamique pour avoir des URL 'propres', sans ? ni &.
Nous allons faire une première approche de cette méthode.

Mais est-ce vraiment utile ?

En plus d'avoir une URL plus 'belle', cette méthode a l'avantage de permettre une meilleure indexation par les moteurs de recherche.
Google par exemple n'indexe en général que les pages ayant au maximum 2 paramètres dans l'URL.

Test du serveur

Tout d'abord, nous devons nous assurer que notre hébergeur accepte la réécriture d'URL.
Pour cela, nous allons créer un répertoire test à la racine de notre site. (http://www.votre-site.com/test/)
Dans ce répertoire, nous ajoutons un fichier test.html qui contiendra ces quelques lignes:

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <p>L'URL Rewriting fonctionne !</p>
    </body>
</html>

Dans ce même répertoire, nous allons créer le fichier de configuration Apache nommé .htaccess

RewriteEngine on
RewriteRule ^rewriting\.html$ test.html [L]

Si vous éprouvez des difficultés à nommer le fichier ainsi avec Windows, appelez le txt.htaccess et renommez le une fois sur le serveur.

Ceci fait, rendez-vous à l'adresse suivante: http://www.votre-site.com/test/rewriting.html

Si vous lisez le texte "URL Rewriting fonctionne !", c'est que le serveur accepte l'URL Rewriting.
Dans le cas contraire, le serveur retourne une erreur (code 500 en général). Il vous faudra alors activer le module de réécriture d'URL.

Activation du module (si le test a échoué)

Passez cette étape si le test a réussi.
Vous devez avoir accès au fichier de configuration Apache pour activer la réécriture.

Pour activer le module de redirection d'URL, éditez le fichier nommé httpd.conf.
Cherchez-y la ligne suivante :

#LoadModule rewrite_module modules/mod_rewrite.so

et décommentez-la en enlevant le '#'.

Faites la même chose avec la ligne suivante (si elle existe):

#AddModule mod_rewrite.c

Les modifications seront actives après le redémarrage du serveur, vous pourrez alors refaire le test.

Explications

Nous allons essayer de comprendre ce qui s'est passé.

RewriteEngine on

Cette ligne est à indiquer une seule fois par fichier .htaccess, avant la première règle de réécriture. Elle indiquent au serveur d'activer le module de réécriture.

RewriteRule ^rewriting\.html$ test.html [L]

Ceci est réellement la règle de réécriture, elle signifie que toute demande du fichier /test/rewriting.html concerne en fait le fichier /test/test.html
La partie '[L]' optionnelle indique au serveur de ne pas tester les autres règles de réécriture si celle-ci fonctionne.

Respectez la syntaxe, le 'faux' lien commence par un ^, se termine par un $ et le point (.) est précédé d'un backslashe ().

Les expressions régulières

Nous avons vu une règle de réécriture 'simple', mais qu'en est-il des règles plus compliquées ?

Par exemple, nous avons actuellement un fichier PHP avec passage de paramètres :
http://www.votre-site.com/article.php?id=25&page=2&lang=fr
et nous souhaitons réécrire l'URL comme ci :
http://www.votre-site.com/article-25-2-fr.html

Des expressions régulières (regex) sont mis à notre dispositions.

Je ne vais pas détailler ici toutes les regex existantes (feront l'objet d'un article futur) mais seulement donner quelques exemples.

La règle de réécriture sera la suivante :

RewriteRule ^article-([0-9]*)-([0-9]*)-([a-z]*)\.html$ /article.php?id=$1&page=$2&lang=$3 [L]
  • Les $x correspondent aux regex dans l'ordre qu'ils ont été déclarés.
  • ([0-9]*) signifie une série de caractères numériques et le * signale qu'il peut y en a plusieurs (exemples: 1 , 25 , 1235, ...).
    Si on aurait mit ([0-9]), il n'y aurait pu y avoir 1 seul chiffre (exemples: 1 , 5 , ...).
  • ([a-z]*) signifie une série de caractères en minuscule, si on voulait aussi les majuscules, la regex aurait été la suivante : ([a-zA-Z]*).

Voilà, sachez qu'il existe d'autres regex mais ceci devrait suffir pour commencer.

Liens utiles

Voici quelques liens qui vous aideront à réécrire vos URL :

Vous savez maintenant comment faire de belles URL.

N'oubliez pas de changer vos liens et de faire attention aux caractères spéciaux qui sont à éviter dans les URL.

comments powered by Disqus