Prochaine révision | Révision précédente |
apache:mod_rewrite [2011/08/27 02:12] – import - création Anael MOBILIA | apache:mod_rewrite [2014/05/27 03:32] (Version actuelle) – modification externe 127.0.0.1 |
---|
<style float-right>{{tag>XXX}}</style> | <style float-right>{{tag>apache mod_rewrite rewrite url referencement}}</style> |
| |
<style float-left>{{:icones:page_web.png?nolink&70}}</style> | <style float-left>{{:icones:reload.png?nolink&70}}</style> |
====== Titre_page ====== | ====== URL rewriting : améliorer son référencement ====== |
| |
//[[:|Retour à la liste des tutoriels]]// | //[[:|Retour à la liste des tutoriels]]// |
| |
<note tip>Présentation rapide.</note> | <note tip>Le mod rewrite permet d'utiliser des URL ne pointant pas sur des fichiers existants sur votre site.</note> |
<note>**Prérequis** | <note>**Prérequis** |
* Aucun prérequis pour ce tutoriel. | * [[apache:installation_configuration|Avoir installé Apache.]] |
</note> | </note> |
\\ | \\ |
===== grand1 ===== | ===== Intérêt de la réecriture d'URL ===== |
lorem ipsum | 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 ! |
===== Liens ===== | |
* [[.:|Retour à la liste des tutoriels XXX]] | |
* [[:|Retour à la liste des tutoriels]] | |
| |
++__But : Uniformiser les url d'accès au site ([référencement|tag:référencement]) - mod [rewrite|tag:rewrite]__++ | Je vais donc utiliser un module d'apache : le [[http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html|mod rewrite]] qui permet de modifier les urls des pages visitées. |
| |
!!!! I) Préambule | ===== Activation du mod rewrite ===== |
Mon site web est accessible par les urls http://anael.eu et http://www.anael.eu . | Pour activer le mod rewrite, je vais utiliser la commande apache de gestion des mods a2enmod : |
| <code bash>a2enmod rewrite</code> |
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 urls bien distinctes ! | |
| |
Je vais donc utiliser un module d'apache : le [[mod rewrite|http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html|en]] qui permet de modifier les urls des pages visitées. | |
| |
!!!! II) Activation du mod rewrite | |
Pour activer le mod rewirte, je vais utiliser la commande apache de gestion des mods a2enmod : | |
///[bash] | |
a2enmod rewrite | |
/// | |
| |
Le système va nous confirmer la bonne activation du module : | Le système va nous confirmer la bonne activation du module : |
///[bash] | <code bash>Enabling module rewrite. |
Enabling module rewrite. | Run '/etc/init.d/apache2 restart' to activate new configuration!</code> |
Run '/etc/init.d/apache2 restart' to activate new configuration! | |
/// | |
| |
Il convient de relancer apache afin qu'il prenne en compte la nouvelle configuration : | Il convient de relancer apache afin qu'il prenne en compte la nouvelle configuration : |
///[bash] | <code bash>/etc/init.d/apache2 restart</code> |
/etc/init.d/apache2 restart | |
/// | |
| |
!!!! III) 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 . | ===== Première tentative : activation du mod rewrite par .htaccess ===== |
''Ce § explique le contenu à rédiger pour effectuer la redirection, mais ne fonctionnera pas dans le fichier .htaccess !)'' | Je vais tenter **infructueusement** d'activer le mod rewrite par le biais d'un fichier .htaccess . |
| <note important>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 !</note> |
| |
J'édite donc un fichier .htaccess situé dans le répertoire racine web (soit /var/vhosts/anael.eu/httpdocs) | J'édite donc un fichier .htaccess situé dans le répertoire racine web (soit /var/www/anael.eu/www/) |
///[bash] | <code bash>nano /var/www/anael.eu/www/.htaccess</code> |
nano /var/www/vhosts/anael.eu/.htaccess | |
/// | |
| |
J'active le mod rewrite : | J'active le mod rewrite : |
///[apache] | <code apache>RewriteEngine On</code> |
RewriteEngine On | |
/// | |
| |
Je pose une condition à la ré-écriture d'url : toutes les urls qui __ne__ commencent __pas__ par www.anael.eu | Je pose une condition à la ré-écriture d'url : toutes les urls qui **ne** commencent **pas** par www.anael.eu |
///[apache] | <code apache>RewriteCond %{HTTP_HOST} !www\.anael\.eu [NC]</code> |
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 ! [[http://www.siteduzero.com/tutoriel-3-14618-les-expressions-regulieres-partie-2-2.html|Voir doc. SdZ]]. |
''A noter :'' | * Les options de traitement sont indiquées entre **[]** (crochets). |
* 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|http://www.siteduzero.com/tutoriel-3-14618-les-expressions-regulieres-partie-2-2.html|fr]. | * 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)// |
* 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) | |
| |
Et voici l'instruction à réaliser si la condition précédente est vraie : | L'instruction à réaliser si la condition précédente est vraie : |
///[apache] | <code apache>RewriteRule (.*) http://www.anael.eu/$1 [R=301,L,NE]</code> |
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) |
* Réecriture de l'url sous la forme http://www.anael.eu/ \[page demandée par l'utilisateur\] | * L'option L indique qu'il s'agit de la dernière règle de réécriture d'URL |
* 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 NE indique à Apache qu'il ne doit pas échapper les caractères spéciaux de la page demandée (tels % $ ; ,) |
* 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 d'une page du site indique une erreur 500 (Erreur 500 / Internal Server Error). | Une fois ce fichier sauvegardé, l'affichage de n'importe quelle page du site indique : //Erreur 500 / Internal Server Error//. |
| |
Un affichage du fichiers d'erreur correspondant au site indique : | Affichons le journal d'erreurs correspondant au site indiqué : |
///[bash] | <code bash>nano /var/www/www/anael.eu/logs/error.log</code> |
nano /var/www/vhosts/anael.eu/logs/error.log | |
/// | |
///[apache] | |
[Sun Sep 12 01:52:08 2010] [alert] [client 85.171.166.126] /var/www/vhosts/anael.eu/httpdocs/.htaccess: RewriteEngine not allowed here | |
/// | |
| |
Clairement la configuration apache du site anael.eu n'autorise pas la modification des paramètres de l'url rewrite du fichier de configuration apache à travers de fichiers .htaccess . | <code apache>[Sun Sep 12 01:52:08 2010] [alert] [client 85.171.166.126] /var/www/anael.eu/www/.htaccess: RewriteEngine not allowed here</code> |
| |
!!!! IV) Activation du mod rewrite dans le fichier de configuration du site | Voici les informations que l'on peut tirer de ce message : |
Il convient de modifier le fichier de configuration apache du site afin de mettre en action le mod rewrite ! | * //[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 |
| |
///[bash] | On constate que je ne peux pas activer l'URL rewriting dans un fichier .htaccess. |
nano /etc/apache2/sites-available/anael.eu | \\ |
/// | Supprimons donc le fichier .htaccess précédemment créé |
| <code bash>rm /var/www/anael.eu/www/.htaccess</code> |
| |
Ajouter les lignes précédements expliquées ''(avant la fermeture de balise </VirtualHost>)'' : | |
///[apache] | |
RewriteEngine On | |
RewriteCond %{HTTP_HOST} !www\.anael\.eu [NC] | |
RewriteRule /(.*) http://www.anael.eu/$1 [R=301,L,NE] | |
/// | |
| |
On doit maintenant supprimer le fichier .htaccess précédemment créé ! | ===== 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 ! |
| |
| <code bash>nano /etc/apache2/sites-available/anael.eu</code> |
| |
| Ajouter les lignes précédemment expliquées //(avant la fermeture de balise </VirtualHost>)// : |
| <code apache>RewriteEngine On |
| RewriteCond %{HTTP_HOST} !www\.anael\.eu [NC] |
| RewriteRule /(.*) http://www.anael.eu/$1 [R=301,L,NE]</code> |
| |
Apache doit être relancé afin de prendre en compte la modification de configuration | Apache doit être relancé afin de prendre en compte la modification de configuration |
///[bash] | <code bash>service apache2 restart</code> |
service apache2 restart | |
/// | |
| |
Les urls de type http://anael.eu sont maintenant automatiquement converties dans le navigateur en http://www.anael.eu ! | Les URL de type http://anael.eu sont maintenant automatiquement converties dans le navigateur en http://www.anael.eu ! |
| |
| \\ |
| ===== Liens ===== |
| * [[.:|Retour à la liste des tutoriels Apache]] |
| * [[:|Retour à la liste des tutoriels]] |