.htaccess : comment ne plus l’utiliser sur son serveur dédié

On prend souvent l’habitude d’utiliser les fichiers .htaccess sur les serveurs mutualisés. Or il n’y a plus aucune raison de les utiliser sur un dédié. En effet, les fichiers .htaccess n’existent que pour permettre aux utilisateurs qui ne sont pas administrateur du serveur de faire des changements de configuration. Donc lorsqu’on a son dédié, plus besoin de .htaccess ! Il faut remplacer tous les .htaccess par des directives dans les fichiers de configuration d’Apache.

Pourquoi ?

Quel est l’intérêt de s’en passer puisque ça marche très bien avec ? Il y a trois raisons :

La rapidité. Pour prendre en compte les fichiers .htaccess, le serveur doit avoir l’option AllowOverride d’activée. Il va donc chercher à chaque chargement de fichier les fichiers .htaccess dans toute l’arborescence. Cela prend du temps. De plus le fichier .htaccess est chargé à chaque fois ce qui fait également perdre du temps.

La sécurité. La directive AllowOverride All permet à l’aide d’un fichier .htaccess de modifier localement la configuration du serveur. Si on peut éviter cette souplesse de configuration la sécurité n’en sera que meilleure.

La maintenance. En supprimant tous les fichiers .htaccess, on peut regrouper toutes les directives dans un même fichier de conf. Cela simplifie grandement la maintenance des règles de ré-écriture par exemple.

Comment ?

Il faut remplacer un à un les fichiers .htaccess par une section Directory dans un fichier de conf de apache (/etc/apache2/apache2.conf par exemple, ou le fichier de conf du virtualHost).
Si par exemple on a un fichier .htaccess dans le répertoire /var/www/monsite.fr qui contient les directives suivantes :

RewriteCond %{HTTP_HOST} ^monsite\.fr [NC]
RewriteRule (.*) http://www.monsite.fr/$1 [QSA,R=301,L]

Il suffit de supprimer ce fichier .htaccess et de rajouter ce bloc dans un fichier de conf d’Apache :

‹Directory /var/www/monsite.fr›
   RewriteCond %{HTTP_HOST} ^monsite\.fr [NC]
   RewriteRule (.*) http://www.monsite.fr/$1 [QSA,R=301,L]
‹/Directory›

Lorsqu’on a remplacé tous les fichiers .htaccess, on peut ajouter la directive :

AllowOverride None

dans une section Directory. Cette directive est par défaut à All. Par exemple, si j’ai remplacé tous les fichiers .htaccess de monsite.fr, je rajoute la directive comme ceci :

‹Directory /var/www/monsite.fr›
   AllowOverride None
   ...
‹/Directory›

Comme ça, Apache ne perdra plus de temps à aller chercher les fichiers .htaccess. De plus la configuration est chargée une seule fois au démarrage d’Apache et plus à chaque requête sur un fichier.

Sources

Apache.org – Utilisation du .htaccess