• Configuration de l'affichage du site :
  • Affichage en pleine largeur
  • Affichage en basse résolution (800px)
  • Affichage en texte seul


Référencement :
conseils, outils, actualité, forum
tout ça gratuit !



Vous êtes ici : Analyses » Autres articles » URL Rewriting


Mise en place de l'URL Rewriting

Imprimer cet article

Par Olivier Duffez, le 2 mai 2006

 Nouveau !  Découvrez le programme 2008 de formation au référencement, avec un module de formation à l'URL Rewriting. Formation préparée et assurée par Olivier Duffez, éditeur de WebRankInfo.

Détails et inscription

Article écrit par Olivier Duffez en collaboration avec Olivier Andrieu, paru initialement le 15/09/2004 dans la lettre Pro d'Abondance

Sommaire de cet article :

  1. URL Rewriting
  2. Principe de l'URL Rewriting
  3. Mise en place de l'URL Rewriting
  4. Optimisation des pages dynamiques

Si vous avez déjà un site dynamique en ligne, voici les étapes à suivre pour mettre en place la réécriture d'URL :

  1. Vérifier que votre hébergeur permet l'utilisation de l'URL Rewriting
  2. Identifier les pages dynamiques dont l'URL comporte des paramètres, et choisir un nouveau schéma d'URL « propre »
  3. Ecrire les règles de réécriture dans le fichier .htaccess adéquat.
  4. Changer tous les liens vers chaque fichier dont l'URL a changé.
  5. Mettre à jour votre site et vérifier que tout fonctionne.

Ouf... ;-) Voyons maintenant chacune de ces étapes les unes après les autres :

Vérifier si l'URL Rewriting est compatible avec votre hébergeur

La première chose à faire est bien évidemment de s'assurer que le serveur qui héberge votre site permet d'utiliser la réécriture d'URL. Tout dépend, dans un premier temps, du type de serveur utilisé. L'objet de cet article n'est pas de passer en revue tous les types de serveurs mais voici un résumé des possibilités de réécriture d'URL sur les serveurs web les plus courants :

Serveur web Support de la réécriture d'URL Détails
Apache Géré par le module mod_rewrite, un module standard d'Apache à partir de la version 1.3.27

Le module mod_rewrite doit être actif :

le fichier de configuration d'Apache (httpd.conf) doit contenir cette ligne :

LoadModule rewrite_module libexec/mod_rewrite.so

ainsi que celle-ci :

AddModule mod_rewrite.c

IIS (Microsoft) En ASP : réécriture possible par des filtres ISAPI, commercialisés par diverses sociétés (payants). Le paramétrage des règles de réécriture est spécifique à chaque composant.
En ASPX (.NET), sur tous les serveurs supportés : des fonctions sont disponibles comme RewriteURL(), etc. qui prennent en charge la réécriture d'URL.

Des codes prêts à compiler pour exploiter ces capacités sont fournis par Microsoft (exemple

) ou via des projets open source comme codeproject.com

Aucune méthode standard n'a été prévue pour définir les règles de réécriture mais une utilisation pratique consiste à les paramétrer directement dans le web.config (fichier de configuration de l'application ASP.Net, présent notamment à la racine du site), qui est standardisé en XML.

Si votre site est hébergé sur un serveur dédié, vous avez accès vous-même à la configuration du serveur. Dans le cas d'un serveur Apache, vous pouvez donc modifier le fichier de configuration afin d'activer le support de la réécriture d'URL. Pensez à redémarrer Apache après avoir modifié le fichier de configuration.

Mais ce n'est pas tout. Si votre site est hébergé sur un serveur mutualisé, il n'est pas garanti que votre hébergeur ait activé le support de la réécriture d'URL, principalement pour des raisons de sécurité.

Si votre site est fourni par un hébergeur gratuit, il y a peu de chances que la réécriture d'URL soit possible. Nous vous conseillons fortement d'investir dans un hébergement payant (en plus d'un nom de domaine), les avantages sont réellement nombreux pour effectuer un bon référencement.

Si vous souhaitez choisir un bon hébergeur, faites-moi confiance et prenez Sivit, qui héberge WebRankInfo depuis des années. Est-il nécessaire de préciser que l'URL Rewriting est possible dans tous les cas de figure ?

Pour vérifier si le module mod_rewrite d'Apache est activé, il vous suffit de suivre les points suivants :

  1. Créez un répertoire nommé test que vous placerez à la racine de votre site (il sera donc accessible via l'adresse http://www.votre-site.com/test/.
  2. Dans ce répertoire, créez un fichier HTML nommé test.html (http://www.votre-site.com/test/test.html) contenant uniquement les lignes suivantes :
    <html>
    <head>
    <title>Test</title>
    </head>
    <body>
    OK !
    </body>
    </html>
  3. Dans ce répertoire, créez un fichier nommé .htaccess contenant les lignes suivantes (nous verrons plus loin leur signification) :
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^inconnu\.html$  /test/test.html [L]
  4. Transférez ce répertoire et ces deux fichiers sur votre site, puis rendez-vous à l'adresse http://www.votre-site.com/test/inconnu.html

Vous vous attendez sans doute à ce que le navigateur affiche un message d'erreur indiquant que le fichier nommé inconnu.html n'existe pas à cet endroit sur votre site (erreur 404). Si c'est le cas, alors votre hébergeur n'autorise sans doute pas la réécriture d'URL : contactez-le pour lui demander.

Si vous êtes chez un hébergeur gratuit qui ne le gère pas, c'est une très bonne raison pour franchir le cap et bénéficier de tous les avantages d'un hébergement professionnel (qui est désormais financièrement accessible à tous).

Sinon, vous devriez voir le texte « OK ! », ce qui signifie qu'en demandant à voir le fichier inconnu.html (qui n'existe pas physiquement sur le serveur), le serveur vous affiche le contenu du fichier test.html (qui existe bien). C'est le principe même de la réécriture d'URL et donc la preuve que votre serveur gère bien la réécriture d'URL. Il a « réécrit », dans notre cas, « inconnu.html » en « test.html ». CQFD.

Il peut y avoir un troisième cas de figure (que nous ne vous souhaitons pas…) : votre site est totalement bloqué, aucune page ne peut être affichée, et vous avez un message indiquant « Erreur 500 ». Dans ce cas ne paniquez pas, il vous suffit de retirer le fichier .htaccess qui est incompatible avec votre hébergeur.

Définir les schémas d'URL

Reprenons notre exemple de site qui dispose d'une base de données d'articles, et dressons la liste des types d'URL. En voici quelques exemples :

  • article.php?id=12&rubrique=5
  • article.php?id=12&page=2&rubrique=5

Pour simplifier la lecture, nous n'avons listé ici que des URLs concernant le même article, mais dans la pratique quand vous essayez de dresser la liste des types d'URL sur votre site, vous pouvez tomber, par exemple, sur :

  • article.php?id=182&rubrique=15
  • article.php?id=36&page=5&rubrique=3

Le principe de l'URL rewriting consiste à trouver les schémas des URL à partir de leurs formes communes. Dans notre exemple, les articles sont accessibles selon deux types d'URL (id+rubrique ou id+rubrique+page), suivant que le numéro de page est précisé ou non.

A partir du moment où vous avez identifié ces « schémas d'URL », vous devez choisir un nouveau format d'URL (l'url « propre »). En général on fait apparaître un nom de fichier avec l'extension .html (ou .htm) mais sachez que vous pouvez mettre ce que vous voulez, cela n'a aucune incidence sur la prise en compte des pages par Google. En effet, quelle que soit l'extension que vous aurez choisie, la page restera une page respectant la norme HTML.

Le nom du fichier sera formé d'un préfixe et/ou d'un suffixe, et des valeurs des variables (que ce soient des chiffres ou des lettres). Profitez de cette étape pour bien réfléchir en fonction du référencement, car vous pouvez utiliser des mots-clés dans les URL de vos pages, qui soient plus parlants pour les internautes et sans doute pris en compte par les moteurs de recherche.

Voici les nouveaux formats d'URL que nous avons choisis pour chacune des URL des exemples précédents :

  • article-12-5.html
  • article-12-2-5.html
  • article-182-15.html
  • article-36-5-3.html

Pour séparer les différentes parties de l'URL, vous devez choisir un séparateur (dans cet article, nous avons choisi d'utiliser uniquement des tirets). Il est plus efficace pour le référencement de choisir un caractère qui soit considéré comme un séparateur de mots par Google. Ainsi, vos URL pourront contenir des mots-clés, ce qui est pris en compte sans soucis par Google.

Vous pouvez néanmoins également utiliser les caractères suivants :

  • Le tiret : -
  • La virgule : ,
  • Le point : .
  • La barre oblique (slash) : /
  • La barre verticale (pipe) : |

Nous vous déconseillons d'utiliser les caractères suivants :

  • Le tiret bas (underscore) : _
  • Le signe dièse : #
  • L'esperluette : &
  • L'arobase : @
  • Le point d'interrogation : ?
  • Le signe dollar : $
  • Les caractères accentués, l'espace

Le tiret et la virgule sont les plus simples ; la barre oblique peut poser des problèmes de répertoires et la barre verticale n'est pas très connue des internautes. Le tiret bas (underscore) pose des soucis avec Google.

Nous avons donc défini deux formats d'URL pour notre rubrique d'affichage des articles. Essayons de les formaliser en supprimant les numéros d'articles, de rubriques ou de pages, et en les remplaçant par leur signification :

  • article-ARTICLE-RUBRIQUE.html
  • article-ARTICLE-PAGE-RUBRIQUE.html

Bien entendu, ARTICLE, RUBRIQUE et PAGE représentent ici des numéros.

Rédiger les règles de réécriture

Maintenant que nous avons déterminé les différents schémas d'URL, il reste à écrire les règles de réécriture qui vont indiquer au serveur comment interpréter chacun de ces schémas.

Passons directement à la solution que nous allons commenter… Voici le contenu du fichier .htaccess situé dans notre répertoire http://www.notre-site.com/articles/ :

#--------------------------------------------------
# Répertoire : /articles/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

# Article sans numéro de page :
RewriteRule ^article-([0-9]+)-([0-9]+)\.html$
 /articles/article.php?id=$1&rubrique=$2 [L]

# Article avec numéro de page :
RewriteRule ^article-([0-9]+)-([0-9]+)-([0-9]+).html
 /articles/article.php?id=$1&page=$2&rubrique=$3 [L]

Remarque : il ne doit pas y avoir de retour chariot sur une ligne de règle de réécriture.

Les lignes commençant par le signe dièse (#) sont des commentaires. N'hésitez pas à en ajouter pour rendre vos fichiers plus compréhensibles : ces lignes sont totalement ignorées par le module de réécriture d'URL.

Chaque fichier .htaccess est spécifique à un répertoire ; nous avons pris l'habitude d'indiquer en haut de ce fichier l'emplacement du répertoire sur le site. Chaque répertoire de votre site devra donc proposer son propre fichier .htaccess.

Les deux premières instructions (Options +FollowSymlinks et RewriteEngine on) ne doivent être présentes qu'une seule fois par fichier, avant toute règle de réécriture.

  • L'instruction Options +FollowSymlinks est facultative mais peut servir dans certaines configurations.
  • L'instruction RewriteEngine on indique que nous souhaitons utiliser le module de réécriture d'URL. Si vous avez un problème avec une règle de réécriture que vous venez d'ajouter, vous pouvez désactiver en quelques secondes la réécriture d'URL le temps de comprendre le problème : il vous suffit d'écrire RewriteEngine off à la place de RewriteEngine on.

La suite du fichier est constituée d'une série de règles de réécriture. Chaque règle est écrite sur une seule ligne (sauf règles complexes) et respecte le format suivant :

RewriteRule URL_A_REECRIRE URL_REECRITE

Explications :

  • RewriteRule est un mot-clé spécifique au module mod_rewrite qui indique que la ligne définit une règle de réécriture.
  • Ensuite vient l'URL à réécrire, c'est-à-dire l'URL « propre » sans existence physique sur le serveur.
  • Enfin vient l'URL réécrite, c'est-à-dire l'URL telle qu'elle sera appelée en interne sur le serveur.
  • Ces 3 éléments doivent être écrits sur une seule ligne, et séparés par un ou plusieurs espaces à chaque fois

Le format de l'URL à réécrire est basé sur les expressions régulières, dont la base devra être acquise pour pouvoir définir des règles de réécriture. Ne vous inquiétez pas, pour la plupart des cas c'est très simple.

Voici la liste des éléments pris en considération dans les règles de réécriture :

Elément Explications
^ Indique le début de l'URL à récrire. Ce caractère est facultatif mais il est plus rigoureux de l'utiliser.
article- Cette partie de l'URL n'est pas utilisée directement. Nous aurions pu écrire art à la place de article. Ce préfixe peut servir à différencier différents schémas d'URL, et il permet à l'internaute de mieux comprendre l'objet de la page.
() Les parenthèses servent à encadrer une variable dont la valeur est récupérée dans la 3ème partie de la ligne.
[0-9]+ Indique que la variable est composée d'un ou plusieurs chiffres.
$ Indique la fin de l'URL à réécrire. Ce caractère est facultatif mais il est plus rigoureux de l'utiliser.
/articles/ Cette partie est parfois facultative (cela dépend de la configuration du serveur). En général il suffit d'indiquer l'emplacement du fichier de manière relative au répertoire dans lequel est situé le fichier .htaccess (donc on peut se passer de cet élément). Sur certains hébergeurs mutualisés (OVH ou Sivit pour n'en citer que deux), vous devez indiquer le chemin complet vers le fichier, à partir de la racine du site, comme dans notre exemple.
article.php Nom du fichier que le serveur doit utiliser pour afficher la page. C'est le nom d'un fichier qui existe physiquement et qui contient un script (PHP dans notre exemple) de gestion de la page dynamique.
? Caractère obligatoire précédant la série de variables passées dans l'URL réécrite.
id=$1 Indique que la variable nommée id prendra la valeur située dans la première paire de parenthèses.
& Caractère utilisé pour séparer 2 variables dans l'URL réécrite.
rubrique=$2 Indique que la variable nommée rubrique prendra la valeur située dans la deuxième paire de parenthèses.
[L] Drapeau (option) signifiant « Last », indiquant au module de réécriture qu'il doit s'arrêter. Plus précisément, si l'URL de la page demandée par le visiteur correspond au schéma défini par cette règle, alors le module de réécriture d'URL ne doit pas examiner les autres règles situées dans le reste du fichier .htaccess. Il n'est pas toujours obligatoire mais il ne fera pas de mal !

Cet exemple de règle de réécriture permet déjà de gérer notre rubrique d'articles, mais il existe d'autres règles plus complexes.

Remarque : le livre « Google, trucs de pros » propose dans son chapitre « Le référencement de sites web dynamiques », la syntaxe complète, bien plus approfondie que dans cet article, à utiliser dans le fichier .htaccess. Vous trouverez également de nombreuses informations sur le site officiel d'Apache

Si vous souhaitez en savoir plus à propos du formatage à utiliser pour écrire ces règles :

  • ([0-9]{1,2}) Autorise un ou deux chiffres
  • ([0-9]*) Autorise tous les chiffres, autant de fois qu'on veut
  • (-[a-z]*) Autorise toutes les lettres et tirets, autant de fois qu'on veut
  • etc.

je vous invite à consulter un tutoriel sur les expressions régulières PERL ici par exemple.

Modifier tous les liens internes

Maintenant que nous avons défini les schémas d'URL et créé les règles de réécriture, il reste à vérifier que dans tout le site, tous les liens utilisent le bon schéma d'URL.

En effet, les règles de réécriture du fichier .htaccess ne suffisent pas à ce que tout votre site soit au nouveau format, avec des URL propres ! C'est à vous de changer la façon d'écrire les liens, que ce soit dans des pages statiques ou dans des pages dynamiques.

Bien entendu, vous devez pouvoir sauter cette étape si vous incluez la gestion de la réécriture d'URL dès la création du site, puisque vous aurez pris soin de générer dès le début des liens aux bons formats.

Mettre à jour et tester

Il est temps de tester ! Transférez tous les fichiers modifiés en ligne, y compris le fichier .htaccess, puis rendez-vous dans votre navigateur pour tester si la réécriture fonctionne.

Pour reprendre notre exemple, comparez ce que vous obtenez en allant sur :

http://www.notre-site.com/articles/article-12-2-5.html

et sur :

http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5

Vous devriez avoir exactement la même page…

En cas de blocage complet du site (par exemple avec une erreur de type 500), n'oubliez pas qu'il suffit de supprimer le fichier .htaccess (ou d'annuler les dernières modifications) pour que tout revienne dans l'ordre.

Nous vous conseillons d'utiliser un logiciel de vérification des liens à l'intérieur de votre site (vous pouvez par exemple choisir Xenu's Link Sleuth, à un logiciel à installer sous Windows. Ce type de logiciel agit comme Googlebot : il parcourt vos pages en suivant tous les liens qu'il trouve. S'il ne trouve aucun lien mort (un lien menant à une page introuvable), alors vous n'avez fait aucune erreur ni dans vos règles de réécriture ni dans vos liens internes. Sinon, corrigez en conséquence.

Page suivante : Optimiser toutes les pages dynamiques

Récemment dans le forum URL Rewriting