Modes de paiement Abuse

Activer Apache Mod Rewrite

06.03.2022, 00:06

Lorsqu'un utilisateur saisit un URL spécifique dans un navigateur et appuie sur Entrée, le serveur web qui reçoit la demande tente de trouver un fichier sur le serveur au niveau du chemin spécifié dans l'URL. Si rien n'est trouvé le long du chemin, un fichier index tel que index.html ou index.php est ouvert. Si rien n'est trouvé, une erreur 404 est renvoyée. Nous n'aurions pas de belles URL faciles à comprendre si les choses ne fonctionnaient pas comme elles le font aujourd'hui. Ces URL sont utilisées sur de nombreux sites. Le module apache mod rewrite est conçu pour résoudre ce problème. Dans ce tutoriel, nous verrons comment l'activer.

Activation du module

Si tout fonctionnait comme décrit, alors en ouvrant n'importe quel lien de ce site dans le répertoire racine devrait exister un fichier ou un script avec le même nom dans la barre d'adresse. Mais ce n'est pas le cas. Lorsqu'il demande cette URL, le serveur web tente de trouver un tel fichier, mais s'il ne le trouve pas, au lieu de renvoyer une erreur 404, il passe le contrôle au module mod_rewrite, qui, pour toutes les URL de ce type, exécute le script index.php, en lui transmettant la chaîne de requête après le domaine. PHP utilise alors ces données pour trouver et renvoyer la page dont l'utilisateur a besoin.

Pour activer le module rewrite, il suffit d'exécuter une simple commande :

$ sudo a2enmod rewrite

Après avoir redémarré le serveur web :

$ sudo systemctl restart apache

Ce n'est pas parce que le module est activé au niveau du serveur web Apache qu'il fonctionnera pour un site web. Pour cela, il faut le configurer dans le fichier .htaccess, en précisant sur quel script faire passer les requêtes vers des pages inexistantes. Pour que le fichier .htaccess fonctionne, la directive AllowOwerride : All doit être ajoutée à la section Directory de l'hôte virtuel.

A titre d'exemple :

Ensuite, par exemple, dans WordPress, vous devez ajouter des lignes comme celle-ci au fichier .htaccess :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Tout le code est placé dans la directive IfModule, ce qui permet au code qu'elle contient d'être exécuté uniquement lorsque le module mod_rewrite est activé, sinon ces lignes sont simplement ignorées. La directive RewriteEngine On active le module pour le répertoire actuel. Ensuite, RewriteBase spécifie que la chaîne entière après le domaine doit être transmise au script. Viennent ensuite les règles RwriteRule avec leurs conditions RewriteCond, qui sont exécutées de manière strictement séquentielle.

L'une des règles de RewriteRule ^index .php$ - [L] indique que si l'URL contient index.php, l'URL doit être réécrite en /. Dans cette expression régulière, la chaîne entière est spécifiée et le point est échappé par une barre oblique inverse. L'indicateur [L] signifie que si l'URL correspond à cette règle, les règles suivantes ne doivent pas être vérifiées. Après l'exécution de cette règle, l'URL sera réécrite et le serveur web supposera qu'il a reçu la requête /, l'analyse des règles recommencera et, cette fois, elle correspondra à la dernière règle.

Les conditions de RewriteCond s'appliquent à toutes les règles suivantes. Ainsi, RewriteCond %{REQUEST_FILENAME} !- f et RewriteCond %{REQUEST_FILENAME} !-d permettent à la dernière règle d'être exécutée uniquement si l'URL n'est pas un fichier ou un dossier. La dernière règle redirige tout vers le script ./index.php.

Si vous n'arrivez pas à comprendre les paramètres de mod_rewrite, il vaut la peine de regarder ce qui se passe à l'intérieur du serveur web lors de vos redirections. Pour ce faire, dans la configuration de l'hôte virtuel du site, vous devez ajouter cette ligne.

Par exemple :

$ sudo vi /etc/apache2/sites-available/001-texts.conf

LogLevel warn rewrite:trace4

Ensuite, dans le fichier journal, qui est donné dans la directive ErrorLog, vous verrez toutes les tentatives du serveur web pour convertir l'URL selon vos règles et serez en mesure de comprendre ce que vous faites de travers. Dans ce tutoriel, nous avons abordé la manière d'activer le module de réécriture d'Apache, ainsi que son fonctionnement et la recherche d'erreurs.