<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Recettes / Tutoriels

Tutoriel du serveur HTTP Apache : fichiers .htaccess

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  pt-br 

Les fichiers .htaccess fournissent une m�thode pour modifier la configuration du serveur au niveau de chaque r�pertoire.

top

Fichiers .htaccess

Les fichiers .htaccess ne doivent �tre utilis�s que si vous n'avez pas acc�s au fichier de configuration du serveur principal. L'utilisation des fichiers .htaccess ralentit le fonctionnement de votre serveur HTTP Apache. Il est toujours pr�f�rable de d�finir les directives que vous pouvez inclure dans un fichier .htaccess dans une section Directory, car elles produiront le m�me effet avec de meilleures performances.
top

Que sont ce fichiers, comment les utiliser ?

Les fichiers .htaccess (ou "fichiers de configuration distribu�s") fournissent une m�thode pour modifier la configuration du serveur au niveau d'un r�pertoire. Un fichier, contenant une ou plusieurs directives de configuration, est plac� dans un r�pertoire de documents particulier, et ses directives s'appliquent � ce r�pertoire et � tous ses sous-r�pertoires.

Note :

Si vous voulez donner un autre nom � votre fichier .htaccess, vous pouvez le faire en utilisant la directive AccessFileName. Par exemple, si vous pr�f�rez nommer votre fichier .config, vous pouvez mettre ceci dans le fichier de configuration de votre serveur :

        AccessFileName .config
      

En g�n�ral, les fichiers .htaccess utilisent la m�me syntaxe que les fichiers de configuration principaux. Ce que vous pouvez mettre dans ces fichier est d�termin� par la directive AllowOverride. Cette directive sp�cifie, sous forme de cat�gories, quelles directives seront trait�es si elles se trouvent dans un fichier .htaccess. Si une directive est permise dans un fichier .htaccess file, la documentation de cette directive contiendra une section Override, sp�cifiant quelle valeur doit prendre AllowOverride pour que cette directive soit trait�e.

Par exemple, si vous regardez la documentation de la directive AddDefaultCharset, vous verrez que cette derni�re est permise dans les fichiers .htaccess (Voir la ligne de contexte dans le r�sum� de la directive). La ligne Override indique FileInfo. Vous devez donc avoir au moins AllowOverride FileInfo pour que cette directive soit trait�e dans les fichiers .htaccess.

Exemple :

Contexte : configuration du serveur, serveur virtuel, directory, .htaccess
Override: FileInfo

Si vous n'�tes pas s�r qu'une directive particuli�re soit permise dans un fichier .htaccess, lisez la documentation de cette directive, et consultez la ligne de contexte pour ".htaccess".

top

Quand doit-on (ne doit-on pas) utiliser les fichiers .htaccess ?

En principe, vous ne devriez utiliser les fichiers .htaccess que lorsque vous n'avez pas acc�s au fichier de configuration du serveur principal. Par exemple, la fausse id�e selon laquelle l'authentification de l'utilisateur devrait toujours �tre faite dans les fichiers .htaccess est tr�s r�pandue. Il est aussi souvent avanc�, ces derni�res ann�es, que les directives de mod_rewrite doivent �tre d�finies dans les fichiers .htaccess. Ceci est tout simplement faux. Vous pouvez configurer l'authentification des utilisateurs au niveau de la configuration du serveur principal, et c'est en fait cette m�thode qui doit �tre privil�gi�e. De m�me, les directives de mod_rewrite fonctionneront mieux, � de nombreux �gards, dans le contexte du serveur principal.

Les fichiers .htaccess ne devraient �tre utilis�s que dans le cas o� les fournisseurs de contenu ont besoin de modifier la configuration du serveur au niveau d'un r�pertoire, mais ne poss�dent pas l'acc�s root sur le syst�me du serveur. Si l'administrateur du serveur ne souhaite pas effectuer des modifications de configuration incessantes, il peut �tre int�ressant de permettre aux utilisateurs isol�s d'effectuer eux-m�mes ces modifications par le biais de fichiers .htaccess. Ceci est particuli�rement vrai dans le cas o� le fournisseur d'acc�s � Internet h�berge de nombreux sites d'utilisateurs sur un seul serveur, et souhaite que ces utilisateurs puissent modifier eux-m�mes leurs configurations.

Cependant et d'une mani�re g�n�rale, il vaut mieux �viter d'utiliser les fichiers .htaccess. Tout �l�ment de configuration que vous pourriez vouloir mettre dans un fichier .htaccess, peut aussi �tre mis, et avec la m�me efficacit�, dans une section <Directory> du fichier de configuration de votre serveur principal.

Il y a deux raisons principales d'�viter l'utilisation des fichiers .htaccess.

La premi�re est li�e aux performances. Lorsque la directive AllowOverride est d�finie de fa�on � autoriser l'utilisation des fichiers .htaccess, httpd va rechercher leur pr�sence dans chaque r�pertoire. Ainsi, permettre l'utilisation des fichiers .htaccess est d�j� en soi une cause de d�gradation des performances, que vous utilisiez effectivement ces fichiers ou non ! De plus, le fichier .htaccess est charg� en m�moire chaque fois qu'un document fait l'objet d'une requ�te.

Notez aussi que httpd doit rechercher les fichiers .htaccess dans tous les r�pertoires de niveau sup�rieur, afin de rassembler toutes les directives qui s'appliquent au r�pertoire courant (Voir la section comment sont appliqu�es les directives). Ainsi, si un fichier fait l'objet d'une requ�te � partir d'un r�pertoire /www/htdocs/exemple, httpd doit rechercher les fichiers suivants :

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/exemple/.htaccess

En cons�quence, chaque acc�s � un fichier de ce r�pertoire n�cessite 4 acc�s au syst�me de fichiers suppl�mentaires pour rechercher des fichiers .htaccess, m�me si aucun de ces fichiers n'est pr�sent. Notez que cet exemple ne peut se produire que si les fichiers .htaccess ont �t� autoris�s pour le r�pertoire /, ce qui est rarement le cas.

La seconde raison d'�viter l'utilisation des fichiers .htaccess est li�e � la s�curit�. Si vous permettez aux utilisateurs de modifier la configuration du serveur, il peut en r�sulter des cons�quences sur lesquelles vous n'aurez aucun contr�le. R�fl�chissez bien avant de donner ce privil�ge � vos utilisateurs. Notez aussi que ne pas donner aux utilisateurs les privil�ges dont ils ont besoin va entra�ner une augmentation des demandes de support technique. Assurez-vous d'avoir inform� clairement vos utilisateurs du niveau de privil�ges que vous leur avez attribu�. Indiquer exactement comment vous avez d�fini la directive AllowOverride et diriger les utilisateurs vers la documentation correspondante vous �vitera bien des confusions ult�rieures.

Notez que mettre un fichier .htaccess contenant une directive dans un r�pertoire /www/htdocs/exemple revient exactement au m�me que mettre la m�me directive dans une section Directory <Directory /www/htdocs/exemple> du fichier de configuration de votre serveur principal :

Fichier .htaccess dans /www/htdocs/exemple :

Contenu du fichier .htaccess dans /www/htdocs/exemple

AddType text/example .exm

Section de votre fichier apache2.conf

<Directory /www/htdocs/example>
    AddType text/example .exm
</Directory>
    

Cependant, la perte de performances sera moindre si vous d�finissez cette directive dans la configuration de votre serveur principal, car cette derni�re ne sera charg�e qu'une seule fois au moment du d�marrage du serveur, alors qu'elle le sera � chaque acc�s dans le cas d'un fichier .htaccess.

L'utilisation des fichiers .htaccess peut �tre enti�rement d�sactiv�e en d�finissant la directive AllowOverride � none :

AllowOverride None
top

Comment sont appliqu�es les directives ?

Les directives de configuration situ�es dans un fichier .htaccess s'appliquent au r�pertoire dans lequel ce fichier .htaccess se trouve, ainsi qu'� tous ses sous-r�pertoires. Cependant, il est important de garder � l'esprit qu'il peut y avoir des fichiers .htaccess dans les r�pertoires de niveau sup�rieur. Les directives sont appliqu�es selon l'ordre dans lequel elles sont rencontr�es. Ainsi, les directives d'un fichier .htaccess situ� dans un r�pertoire particulier peuvent �craser les directives se trouvant dans des fichiers .htaccess situ�s � un niveau sup�rieur dans l'arborescence des r�pertoires. Et ces derni�res peuvent elles-m�mes avoir �cras� des directives d'un fichier .htaccess situ� � un niveau encore plus haut, ou dans le fichier de configuration du serveur principal.

Exemple :

Dans le r�pertoire /www/htdocs/exemple1 se trouve un fichier .htaccess contenant ce qui suit :

Options +ExecCGI

Note : "AllowOverride Options" doit �tre pr�sent pour permettre l'utilisation de la directive "Options" dans les fichiers .htaccess.

Dans le r�pertoire /www/htdocs/exemple1/exemple2 se trouve un fichier .htaccess contenant ce qui suit :

Options Includes

Ainsi, � cause de ce second fichier .htaccess du r�pertoire /www/htdocs/exemple1/exemple2, l'ex�cution des CGI est interdite, car la derni�re d�finition d'options Options Includes �crase toute autre d�finition d'options d'un fichier .htaccess situ� dans un r�pertoire de niveau sup�rieur.

Interactions entre les fichiers .htaccess et les fichiers de configuration du serveur principal

Comme indiqu� dans la documentation sur les Sections de configuration, les fichiers .htaccess peuvent �craser les directives des sections <Directory> pour le r�pertoire correspondant, mais peuvent eux-m�mes �tre �cras�s par d'autres types de sections des fichiers de la configuration principale. Cette possibilit� peut s'av�rer utile pour forcer certaines configurations, m�me en cas de pr�sence de l'option lib�rale AllowOverride. Par exemple, pour interdire l'ex�cution de scripts en autorisant la d�finition de toute autre option dans les fichiers .htaccess, vous pouvez utiliser :

<Directory /www/htdocs>
    AllowOverride All
</Directory>

<Location />
    Options +IncludesNoExec -ExecCGI
</Location>
Dans cet exemple, on consid�re que le chemin d�fini par la directive DocumentRoot est /www/htdocs.
top

Exemple d'authentification

Si vous acc�dez directement � ce point du document pour apprendre � effectuer une authentification, il est important de noter ceci. Il existe une fausse id�e selon laquelle il serait n�cessaire d'utiliser les fichiers .htaccess pour impl�menter l'authentification par mot de passe. Ceci est tout simplement faux. Pour y parvenir, il est pr�f�rable de mettre les directives d'authentification dans une section <Directory> du fichier de configuration de votre serveur principal, et les fichiers .htaccess ne devraient �tre utilis�s que dans le cas o� vous n'avez pas acc�s au fichier de configuration du serveur principal. Voir ci-dessus pour savoir dans quels cas vous devez ou ne devez pas utiliser les fichiers .htaccess.

Ceci �tant dit, si vous pensez que vous devez quand-m�me utiliser un fichier .htaccess, vous pouvez utiliser la configuration suivante :

Contenu du fichier .htaccess :

AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
    

Notez que AllowOverride AuthConfig doit �tre pr�sent pour que ces directives produisent leur effet.

Vous pouvez vous r�f�rer au tutoriel sur l'authentification pour une description plus d�taill�e de l'authentification et de l'autorisation.

top

Exemple d'Inclusion C�t� Serveur (Server Side Includes - SSI)

Les fichiers .htaccess sont aussi couramment utilis�s pour activer les SSI pour un r�pertoire particulier. Pour y parvenir, on utilise les directives de configuration suivantes, plac�es dans un fichier .htaccess enregistr� dans le r�pertoire consid�r� :

Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
    

Notez que AllowOverride Options et AllowOverride FileInfo doivent �tre tous les deux pr�sents pour que ces directives puissent produire leur effet.

Vous pouvez vous r�f�rer au tutoriel SSI pour une description plus d�taill�e des SSI.

top

Exemple de CGI

En fin de compte, vous avez d�cid� d'utiliser un fichier .htaccess pour permettre l'ex�cution des programmes CGI dans un r�pertoire particulier. Pour y parvenir, vous pouvez utiliser la configuration suivante :

Options +ExecCGI
AddHandler cgi-script cgi pl
    

Alternativement, si vous souhaitez que tous les fichiers d'un r�pertoire donn� soient consid�r�s comme des programmes CGI, vous pouvez utiliser la configuration suivante :

Options +ExecCGI
SetHandler cgi-script
    

Notez que AllowOverride Options et AllowOverride FileInfo doivent �tre tous les deux pr�sents pour que ces directives puissent produire leur effet.

Vous pouvez vous r�f�rer au tutoriel CGI pour une description plus d�taill�e de la configuration et de la proprammation CGI.

top

R�solution des probl�mes

De nombreuses raisons peuvent �tre � l'origine du fait que les directives que vous avez mises dans un fichier .htaccess ne produisent pas l'effet d�sir�.

Le plus souvent, le probl�me vient du fait que la d�finition de la directive AllowOverride ne permet pas l'activation des directives de votre fichier .htaccess. V�rifiez si une directive AllowOverride None n'affecte pas le r�pertoire o� se trouve votre fichier. Un bon test consiste � mettre des directives dont la syntaxe est erron�e dans votre ficher .htaccess et de recharger la page. Si aucune erreur n'est g�n�r�e par le serveur, il est pratiquement certain qu'une directive AllowOverride None affecte votre r�pertoire.

Par contre, si vous obtenez des erreurs de serveur lorsque vous tentez d'acc�der � des documents, consultez votre journal des erreurs de httpd. Il vous indiquera probablement que la directive utilis�e dans votre fichier .htaccess n'est pas permise.

[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here

Cela signifie soit que vous utilisez une directive qui n'est jamais permise dans les fichiers .htaccess, soit que vous n'avez tout simplement pas d�fini la directive AllowOverride � un niveau suffisant pour la directive que vous utilisez. Consultez la documentation de cette directive pour d�terminer quel cas s'applique.

Le journal des erreurs peut aussi vous signaler une erreur de syntaxe dans l'usage de la directive elle-m�me.

[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters

Dans ce cas, le message d'erreur sera sp�cifique � l'erreur de syntaxe que vous avez commise.

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  pt-br 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.