<-
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.