URL rewriting : améliorer son référencement

Retour à la liste des tutoriels

Le mod rewrite permet d'utiliser des URL ne pointant pas sur des fichiers existants sur votre site.


Intérêt de la réecriture d'URL

Mon site web est accessible par les URL http://anael.eu et http://www.anael.eu .

Afin d'optimiser le référencement par les robots des métamoteurs de recherche, il convient que chaque contenu ne soit accessible par une seule url. Or, http://anael.eu/ et http://www.anael.eu sont considérés comme 2 URL bien distinctes !

Je vais donc utiliser un module d'apache : le mod rewrite qui permet de modifier les urls des pages visitées.

Activation du mod rewrite

Pour activer le mod rewrite, je vais utiliser la commande apache de gestion des mods a2enmod :

a2enmod rewrite

Le système va nous confirmer la bonne activation du module :

Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Il convient de relancer apache afin qu'il prenne en compte la nouvelle configuration :

/etc/init.d/apache2 restart

Première tentative : activation du mod rewrite par .htaccess

Je vais tenter infructueusement d'activer le mod rewrite par le biais d'un fichier .htaccess .

Cette partie explique le contenu à rédiger pour effectuer la redirection, mais ne fonctionnera pas dans le fichier .htaccess !)
Le but de cette partie est d'expliquer une méthodologie de recherche d'erreurs !

J'édite donc un fichier .htaccess situé dans le répertoire racine web (soit /var/www/anael.eu/www/)

nano /var/www/anael.eu/www/.htaccess

J'active le mod rewrite :

RewriteEngine On

Je pose une condition à la ré-écriture d'url : toutes les urls qui ne commencent pas par www.anael.eu

RewriteCond %{HTTP_HOST} !www\.anael\.eu [NC]

A noter :

  • La chaîne est traitée comme une expression régulière, il convient donc d'échapper le caractère . (point) afin qu'il ne soit pas traité comme un joker ! Voir doc. SdZ.
  • Les options de traitement sont indiquées entre [] (crochets).
  • L'option NC signifie que la condition n'est pas sensible à la casse (anael.eu ; ANAEL.EU ; aNaEl.eU seront traitées de la même manière)

L'instruction à réaliser si la condition précédente est vraie :

RewriteRule (.*) http://www.anael.eu/$1 [R=301,L,NE]
  • Réecriture de l'url sous la forme http://www.anael.eu/ + page demandée par l'utilisateur
  • L'option R=301 indique qu'une réponse 301 (page has moved) va être retournée au visiteur en même temps que la nouvelle URL (permet de conserver le référencement par exemple)
  • L'option L indique qu'il s'agit de la dernière règle de réécriture d'URL
  • L'option NE indique à Apache qu'il ne doit pas échapper les caractères spéciaux de la page demandée (tels % $ ; ,)

Une fois ce fichier sauvegardé, l'affichage de n'importe quelle page du site indique : Erreur 500 / Internal Server Error.

Affichons le journal d'erreurs correspondant au site indiqué :

nano /var/www/www/anael.eu/logs/error.log
[Sun Sep 12 01:52:08 2010] [alert] [client 85.171.166.126] /var/www/anael.eu/www/.htaccess: RewriteEngine not allowed here

Voici les informations que l'on peut tirer de ce message :

  • [Sun Sep 12 01:52:08 2010] : le moment auquel le problème a été rencontré
  • [alert] : le niveau de l'erreur
  • [client 85.171.166.126] : le visiteur ayant causé l'erreur (moi en l'occurence)
  • /var/www/anael.eu/www/.htaccess: : le fichier ayant causé l'erreur
  • RewriteEngine not allowed here : le message d'erreur

On constate que je ne peux pas activer l'URL rewriting dans un fichier .htaccess.
Supprimons donc le fichier .htaccess précédemment créé

rm /var/www/anael.eu/www/.htaccess

Activation du mod rewrite dans le fichier de configuration du site

Nous allons donc modifier le fichier de configuration Apache du site anael.eu afin de mettre en action le mod rewrite !

nano /etc/apache2/sites-available/anael.eu

Ajouter les lignes précédemment expliquées (avant la fermeture de balise </VirtualHost>) :

RewriteEngine On
RewriteCond %{HTTP_HOST} !www\.anael\.eu [NC]
RewriteRule /(.*) http://www.anael.eu/$1 [R=301,L,NE]

Apache doit être relancé afin de prendre en compte la modification de configuration

service apache2 restart

Les URL de type http://anael.eu sont maintenant automatiquement converties dans le navigateur en http://www.anael.eu !


Liens