Serveur Apache HTTP Version 2.4
Les fichiers .htaccess
fournissent une m�thode pour
modifier la configuration du serveur au niveau de chaque r�pertoire.
Modules Apparent�s | Directives Apparent�es |
---|---|
.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.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.
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
.
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".
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
:
/www/htdocs/exemple
AddType text/example .exm
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
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.
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>
DocumentRoot
est
/www/htdocs
.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.
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.
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.
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.