TUTOS.EU

Le module Apache mod_rewrite

Faire de la réécriture d'url avec le module mod_rewrite d'Apache

Le module mod_rewrite d'Apache permet de capturer vos url et de les réécrires.
C'est ce qui permet d'utiliser https://www.tutos.eu/4585 et non https://www.tutos.eu/?n=4585

 

Une bonne entrée en la matière est de consulter cette page :
https://httpd.apache.org/docs/current/fr/mod/mod_rewrite.html

Activation

Voici comment la réécriture d'url a été faite pour ce site :

Le module mod_rewrite est activé de base chez OVH donc je n'ai rien eu à faire de ce côté là.

Par contre, sur une VM Linux qui sert de maquette, il faut au l'installer avec les commandes

  • sudo a2enmod rewrite
  • sudo service apache2 restart

 

Ensuite, dans le répertoire racine du site, dans le fichier .htaccess le module est activé avec cette ligne :

RewriteEngine On

 

De là, on peut écrire des règles et poser des conditions. Ainsi index.php a été exclu avec 

RewriteCond %{REQUEST_URI} !index.php

 

Des répertoires ont été exclus par précaution, car ce n'est normalement pas nécessaire. La directive utilisée pour cela est
RewriteCond %{REQUEST_URI} !^/((rep1|rep2|rep3)/.*)$

 

La redirection s'actionne pour les urls qui commencent éventuellement par / suivies uniquement de chiffres.

Donc l'url doit commencer éventuellement par /, suivi uniquement de chiffres et se terminer par un chiffre, ce qui donne :
RewriteCond %{REQUEST_URI} ^/?[\d]+$

 

Suite à cela, la règle de réécriture est de prendre la suite de chiffre qui a été mise dans l'url pour la poster sous la variable n :
RewriteRule (.*) index.php?n=$1

Au final pour cet exemple l'ensemble donne

RewriteEngine On

RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !^/((rep1|rep2|rep3)/.*)$
RewriteCond %{REQUEST_URI} ^/?[\d]+$
RewriteRule (.*) index.php?n=$1
Lien vers le fichier : cliquez ici

Pour créer ou modifier le fichier .htaccess sur un serveur linux avec une config d'apache par défaut, taper

sudo nano /var/www/html/.htaccess
Lien vers le fichier : cliquez ici

Pour faire du débug, il faut modifier le fichier de configuration de votre site.
Si c'est celui par défaut de votre serveur apache, modifiez le avec

nano /etc/apache2/sites-enabled/000-default.conf
Lien vers le fichier : cliquez ici

Ajouter un niveau de log. Le maximum est 8.
Attention : les conséquences sur les performances du serveur peuvent être dramatiques, donc faites bien les manipulations sur un serveur hors production.

LogLevel alert rewrite:trace8
Lien vers le fichier : cliquez ici

Ensuite relancer le service apache pour prise en compte

service apache2 restart
Lien vers le fichier : cliquez ici

Et examiner le fichier de log avec

tail -f /var/log/apache2/error.log
Lien vers le fichier : cliquez ici

Activer le log de mod_rewrite permet de voir par exemple que pour l'url http://monsite/suffixe {REQUEST_URI} ne reçoit pas suffixe mais /suffixe

Pages Web

Site WebDescription
httpd.apache.orgModule Apache mod_rewrite
Sumtips.comExclude Certain Folders from htaccess Rewrite Rules
webrankinfo.comMaîtrisez l’URL Rewriting

Article(s) précédent(s)