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 Web | Description |
|---|---|
| httpd.apache.org | Module Apache mod_rewrite |
| Sumtips.com | Exclude Certain Folders from htaccess Rewrite Rules |
| webrankinfo.com | Maîtrisez l’URL Rewriting |
Article(s) précédent(s)