Retrouvez cet article dans : Linux Pratique 35
Les fichiers .htaccess sont des fichiers de configuration pour le serveur Apache, qui permettent d'établir des règles concernant l'accès à un répertoire en particulier, ainsi qu’à ses éventuels sous-répertoires. Vous pourrez par exemple restreindre l'accès à un site Web (les utilisateurs devront saisir un mot de passe), ou encore personnaliser les pages d'erreur, etc.
Le principe
Les fichiers .htaccess sont de simples fichiers textes qui peuvent être utilisés dans n'importe quel répertoire installé sur votre serveur. Il est très facile d'établir un fichier .htaccess, et vous pourrez paramétrer beaucoup de choses grâce à ce fichier.
La plupart du temps, ils sont utilisés pour protéger l'accès à un répertoire, autrement dit une page ou tout un site Web, par un mot de passe. Mais ils peuvent servir également à définir des pages d'erreur personnalisées. Ce sont ces deux exemples que nous allons traiter ici.
Tout d'abord, retenez qu'il faut placer le fichier .htaccess dans le répertoire concerné par l'accès restreint (et/ou par l'erreur). À noter que les permissions qui seront définies pour le répertoire seront répercutées sur les sous-répertoires qu'il contient.
Notez aussi qu'il est possible de nommer le fichier .htaccess différemment. Pour cela, allez dans le fichier de configuration d'Apache, et remplacez la ligne AccessFileName .htaccess par AccessFileName .nouveau_nom
Une page d'erreur plus explicite
Comme tous les internautes, vous vous êtes certainement déjà retrouvé face à une erreur 404 (page non trouvée). C'est ce qui arrivera également si l'un de vos visiteurs arrive sur l'une des pages de votre site mais que vous l'avez déplacée (voire supprimée). Dans ce cas, pour présenter aux visiteurs quelque chose de plus esthétique, vous pouvez créer votre propre page d'erreur, puis écrire la commande suivante dans le fichier .htaccess :

ErrorDocument 404 /chemin/vers/votre/pagederreur.html
La directive ErrorDocument indique au serveur quelle page (ou quel message) il doit retourner au visiteur en cas d'erreur. La directive se construit de la façon suivante :
ErrorDocument code-erreur /chemin/vers/page
ou
ErrorDocument code-erreur "un message ici".
Dès ce moment, toutes les requêtes pour des pages inexistantes recevront en retour la page que vous aurez indiquée. N'oubliez pas de placer cette fameuse page d'erreur personnalisée à la racine de votre site ! Vous pouvez également prévoir une page pour les autres erreurs fréquentes du Web (401 : Autorisation Requise, 400 : Mauvaise requête, 403 : Interdit, 500 : Erreur interne serveur).
Attention, il est également nécessaire de modifier le fichier de configuration d'Apache. En effet, quand le serveur trouve un fichier .htaccess (ou autre nom spécifié via AccessFileName), il va rechercher quels sont les paramètres à appliquer au répertoire concerné. Quand la directive AllowOverride a pour valeur None, le fichier .htaccess est complètement ignoré par le serveur. La mention AllowOverride All, au contraire, permet d'utiliser le fichier .htaccess mais sans exception : tous les types de directives sont autorisés (AuthConfig, FileInfo, Indexes, etc.).
Ici, il faut utiliser la mention FileInfo, qui permet uniquement l'usage des directives qui contrôlent les types de document (comme ErrorDocument, DefaultType, etc.)
Dans le fichier de configuration, nous avons donc remplacé AllowOverride None par AllowOverride FileInfo de la façon suivante :
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride FileInfo Order allow,deny allow from all </Directory>
Protéger l'accès à un répertoire
C'est une des applications les plus courantes du fichier .htaccess. Celui-ci doit notamment contenir le chemin vers le fichier comportant les logins et mots de passe des utilisateurs autorisés. Il peut se présenter de la façon suivante :
AuthType Basic AuthName "Acces restreint" (évitez les accents ici) AuthUserFile /chemin/vers/fichier/.htpasswd require valid-user
Plus en détail, AuthType désigne le type d'identification (ici, la mention Basic signifie qu'il faut utiliser AuthUserFile pour l'authentification). AuthUserFile introduit le chemin d'accès vers le fichier contenant les logins et mots de passe des utilisateurs autorisés à accéder au répertoire concerné. AuthName permet l'affichage d'une boîte de dialogue dans le navigateur Web, du type : " Entrez le nom et le mot de passe pour ‘Accès restreint’...". La mention require valid-user signifie que seules les personnes identifiées auront un droit d'accès.
D'autres directives sont permises. Je vous invite à consulter la documentation officielle pour aller plus loin 1.
Le fichier de mots de passe, nommé .htpasswd, est un simple fichier texte, contenant sur chaque ligne le nom d'un utilisateur, suivi d'un double point, puis du mot de passe (en clair ou crypté). Il est bien entendu préférable que les mots de passe soient cryptés pour plus de sécurité. Apache fournit un utilitaire permettant de générer facilement des mots de passe cryptés. Il s'agit du programme htpasswd (qui se trouve en général dans le répertoire /usr/bin).
Pour créer un nouveau fichier de mots de passe, il faut entrer la commande suivante :
htpasswd -c chemin/vers/fichier/de/motdepasse nom_utilisateur

Le mot de passe vous sera alors demandé en ligne de commande, et le fichier sera généré automatiquement. Si votre fichier de mot de passe existe déjà et que vous souhaitez ajouter un utilisateur, ôtez simplement l'option –c :
htpasswd chemin/vers/fichier/de/motdepasse nom_utilisateur
À nouveau, il est nécessaire de modifier le fichier de configuration d'Apache en remplaçant AllowOverride None par AllowOverride AuthConfig. Ce type permet l'usage des directives d'autorisation comme AuthName, AuthType, etc.
Bien entendu, si vous souhaitez mettre en place à la fois le système d'identification et une page d'erreur personnalisée, il suffit d'ajouter les deux mentions à la suite : AllowOverride AuthConfig FileInfo. On peut bien entendu écrire AllowOverride All, mais il est plus pertinent de n'inscrire que ce qui est nécessaire...
Votre fichier .htaccess contiendra alors l'ensemble des directives :
AuthType Basic AuthName "Acces restreint" AuthUserFile /chemin/vers/fichier/.htpasswd require valid-user ErrorDocument 404 /chemin/vers/votre/pagederreur.html
1 La documentation officielle pour Apache 2.0 : http://httpd.apache.org/docs/2.0/howto/htaccess.html

