Serveurs web

Réécriture d'URL sous Apache

Dernière mise à jour : 31/12/2021 à 18h08
Table des matières apache-server-logo

Introduction



Encore un problème simple à résoudre mais qui m'a demandé beaucoup de temps. Sur ce site que vous consultez actuellement, j'utilise la réécriture d'URL. Je ne m'étendrai pas sur le sujet, si vous êtes ici c'est que vous savez de quoi je parle mais que cela ne fonctionne pas chez vous.

Je ne vais pas détailler ici comment créer des règles de réécriture, le CMS que j'utilise (PhpBoost) le fait automatiquement mais la configuration de base du serveur Apache pour que cela fonctionne.

Faites attention à l'hébergement de votre site web, dans mon cas il est auto-hébergé donc pas de problème mais certains hébergeurs ne permettent pas la réécriture d'URL, renseignez-vous auprès de votre hébergeur

En partant du principe que votre hébergement permet de faire de la réécriture d'URL, voici les quelques paramétrages à mettre en place.

Activation de mod_rewrite



Pour activer mod_rewrite sur un serveur Apache, une simple commande :
Code BASH :
a2enmod rewrite


Si la réponse à la commande est que a2enmod n'est pas installé, installez locate :
Code BASH :
apt install locate


Puis recherchez la commande a2enmod :
Code BASH :
locate a2enmod


La réponse vous donnera la localisation, par exemple :
Citation :
/usr/sbin/a2enmod


Vous pourrez alors taper la commande suivante (à adapter en fonction de la réponse précédente) :
Code BASH :
/usr/sbin/a2enmod rewrite


La petite astuce qui m'a demandé tant de recherches...



Malgré cette activation, cela ne fonctionnait toujours pas chez moi, ce qu'il manquait, c'est une toute petite modification dans la configuration d'Apache. Ouvrez le fichier /etc/apache2/apache2.conf et cherchez le bloc correspondant à la localisation de votre site web, généralement celui-ci :
Code PHP :
 
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
 


Remplacez "None" par "All" puis redémarrez le serveur Apache :
Code BASH :
systemctl restart apache2.service


Et voilà, le problème est normalement réglé.

Vérifier que la réécriture fonctionne



Créez un répertoire nommé "test" que vous placerez à la racine de votre site (il sera donc accessible via l'adresse http://www.votre-site.com/test/). /> Dans ce répertoire, créez un fichier HTML nommé test.html (http://www.votre-site.com/test/test.html) contenant uniquement les lignes suivantes :

Code HTML :
 
<html><head><title>Test</title></head><body>OK !</body></html>


Vous pouvez vous rendre sur cette page avec votre navigateur pour vérifier (http://www.votre-site.com/test/), vous devriez avoir une page avec "OK !"

Dans ce répertoire, créez un fichier nommé .htaccess contenant les lignes suivantes :

Code BASH :
 
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^inconnu\.html$  /test/test.html [L]
 


Transférez ce répertoire et ces deux fichiers sur votre site, puis rendez-vous à l'adresse http://www.votre-site.com/test/inconnu.html

Vous devriez normalement avoir le même résultat que précédemment.

Et voilà ! :top

Cette page a été vue 479 fois