Résumé

Bien souvent les adresses URL d'un site web découle directement de la technologie. Par exemple, pour un site statique, on vera un nom de fichier avec l'extension "html", pour un site dynamique en PHP, on verra l'extension "php", pour un site en Java, on verra les extension "jsp" et "do", etc... De plus, pour les sites dynamiques, l'url pourra contenir en plus des paramètres.

Cette situation présente un inconvénient majeur pour un site public : lorsque le site évolue ou change de technologie, de sorte que les liens internes au site changent, les liens vers les contenus antérieurs à ce changement risquent de ne plus fonctionner, ce qui posera des problèmes lorsque les contenus utilisent des liens qui sont devenus obsolètes. De plus, pour les pages indexables par un moteur de recherches, les résultats renvoyés par ce moteur ne seront plus valables.

La ré-écriture des URLs du serveur Apache va nous permettre de résoudre ce problème, en définissant, pour un projet de site, les URL correspondant à des fonctions ou des opérations sur le site, et ce de manière systématique.

Qu'est-ce que la ré-écriture des URLs

La ré-écriture des URLs est un mécanisme introduit par l'extension mod_rewrite du serveur Apache. Le principe est simple : on définit une liste de modèles de liens susceptible d'être reçus, et chaque modèle est associée à un modèle de lien pour la ré-écriture. Lorsque le serveur reçoit une requête, l'URL demandée est comparée à la liste des modèles. Si un modèle correspond, le serveur utilise le modèle associé pour créer le liens réellement utilisé par le serveur. Si aucun modèle ne correspond, le serveur utilisera l'URL telle quelle, sans ré-écriture.

Ce processus est transparent pour l'utilisateur, autrement dit l'utilisateur n'a pas conscience que l'URL qu'il a demandéé a été ré-écrite.

Définir l'interface fonctionnelle d'un site avec la ré-écriture des URL

En programmation objet, une tâche importante est de concevoir des composants logiciels réutilisables, modulaires, remplaçables, et autres qualités. Pour atteindre ce but, on définit des interfaces pour un composant, autrement dit les fonctionnalités et les paramêtres qui doivent être présentes dans un composant compatible.

La ré-écriture des URL nous permet de faire la même choses pour un site : on définira une série de modèle de liens, en spécifiant la fonction de chaque modèle (affiché une page de catalogue, la fiche d'un trombinoscope, etc...). Par la suite, pour toute évolution nécessitant le changement des liens dans un système sans la ré-écriture, il suffira d'écrire les règles de conversion entre les liens spécifiés et les nouveaux liens réels

Exemples de ré-écriture

Voici un extrait de mes règles de ré-écriture pour ce site. Lorsque je voudrais changer complètement de système de blog, il me suffira de modifier ces règles pour qu'elles continuent de fonctionner, et de rajouter de nouvelles règles pour les nouvelles fonctionnalitées.

RewriteEngine on
RewriteRule ^$ /frontalv2/blog.php?vpmPage=blog/david
RewriteRule ^rss[/]?$ /frontalv2/rss.php?vpmPage=blog/david

RewriteRule ^page/([0-9A-Za-z_/]+)$ /frontalv2/view.php?vpmPage=$1
RewriteRule ^blog/([0-9A-Za-z_]+)[/]?$ /frontalv2/blog.php?vpmPage=blog/$1
RewriteRule ^rss/([0-9A-Za-z_]+)[/]?$ /frontalv2/rss.php?vpmPage=blog/$1
RewriteRule ^archives/([0-9A-Za-z_]+)/([0-9]+)[/]?$ /frontalv2/blog.php?vpmPage=blog/$1&vpmArchive=$2