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 Copier le code

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 Copier le code

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 Copier le code

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 Copier le code

Ensuite relancer le service apache pour prise en compte

service apache2 restart
Lien vers le fichier : cliquez ici Copier le code

Et examiner le fichier de log avec

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

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)

2