Utilisation des fichiers .htaccess
Nous avons essayé de mettre les directives de configuration dans un fichier nommé ... /htdocs/.htaccess plutôt que dans httpd.conf. Cela fonctionne, mais comment choisir entre ces deux méthodes ?
L’avantage du mécanisme .htaccess est que vous pouvez modifier les directives de configuration sans devoir relancer le serveur. C’est notamment très intéressant sur un site où un grand nombre de personnes gèrent leurs propres pages mais ne sont pas autorisées à arrêter le serveur ni, bien sûr, à modifier ses fichiers de configuration. L’inconvénient de cette méthode, par contre, est que les fichiers sont lus à chaque accès au serveur et non plus une seule fois au démarrage : il y a donc une perte non négligeable de performances.
Le fichier httpd1.conf (de .site.htaccess ) contient les lignes suivantes :
User webuser
Group webgroup
ServerName www.butterthlies.com
AccessFileName .myaccess
ServerAdmin sales@butterthlies.com
DocumentRoot /usr/www/APACHE3/site.htaccess/htdocs/salesmen
ErrorLog /usr/www/APACHE3/site.htaccess/logs/error_log
TransferLog /usr/www/APACHE3/site.htaccess/logs/access_log
ServerName sales.butterthlies.com
Le contrôle des accès, comme l’indique AccessFileName, se trouve maintenant dans le fichier ... /htdocs/salesmen/.myaccess :
AuthType Basic
AuthName darkness
AuthUserFile /usr/www/APACHE3/ok_users/sales
AuthGroupFile /usr/www/APACHE3/ok_users/groups
require group cleaners
Si vous lancez ce site avec ./go 1 et que vous tentez d’accéder à http://sales.butterthlies.com/, il vous sera demandé votre identifiant et un mot de passe. Si vous voulez entrer, utilisez l’identité de daphne ou de sonia, car seuls les membres du groupe cleaners sont autorisés.
Vous pouvez ensuite modifier .htdocs/salesmen/.myaccess pour qu’il contienne plutôt une directive require group directors. Sans relancer Apache, vous devez maintenant vous identifier comme bill ou ben.
AccessFileName
La directive AccessFileName donne autorité aux fichiers indiqués. Si on utilise un répertoire, l’autorité est donnée à tous ses fichiers et sous-répertoires.
AccessFileName fichier, fichier|répertoire et sous-répertoires ...
Configuration du serveur, hôte virtuel.
Ajoutez la ligne suivante à httpd1.conf :
AccessFileName .myaccess1, myaccess2 ...
Relancez Apache (car la directive AccessFileName doit être lue au démarrage). Vous pourriez croire que vous pouvez limiter AccessFileName à .myaccess dans un répertoire particulier, mais pas ailleurs. Ce n’est pas le cas -- cette directive est globale (en tous cas, plus globale que lorsqu’elle s’applique à un répertoire). Modifiez .conf/httpd.conf pour qu’il contienne :
<Directory /usr/www/APACHE3/site.htaccess/htdocs/salesmen>
AccessFileName .myaccess
</Directory>
Apache se plaindra :
Syntax error on line 2 of /usr/www/APACHE3/site.htaccess/conf/httpd1.conf: AccessFileName not allowed here
Comme nous l’avons dit, le fichier défini par AccessFileName est recherché et relu à chaque accès, ce qui prend du temps. Lorsqu’un client demande l’accès à un fichier /usr/www/APACHE3/site.htaccess/htdocs/salesmen/index.html, Apache recherche les fichiers suivants :
- /.myaccess
- /usr/.myaccess
- /usr/www/APACHE3/.myaccess
- /usr/www/APACHE3/site.htaccess/.myaccess
- /usr/www/APACHE3/site.htaccess/htdocs/.myaccess
- /usr/www/APACHE3/site.htaccess/htdocs/salesmen/.myaccess
Ces recherches multiples ralentissent également le serveur. Vous pouvez les empêcher avec la directive AllowOverride, afin d’améliorer significativement les performances d’Apache :
<Directory />
AllowOverride none
</Directory>
Il est important de comprendre qu’ici / indique le vrai répertoire racine (car c’est là qu’Apache commence ses recherches) et non la racine de l’arborescence des documents du serveur.