URL rewriting : améliorer son référencement
Retour à la liste des tutoriels
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 .
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 !