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.