| 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]] |