Les fichiers .htaccess
fournissent une méthode pour
modifier la configuration du serveur au niveau de chaque répertoire.
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 .config
, vous pouvez mettre ceci dans le fichier de
configuration de votre serveur :
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 .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
Par exemple, si vous regardez la documentation de la directive
.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 .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
Il y a deux raisons principales d'éviter l'utilisation des
fichiers .htaccess
.
La première est liée aux performances. Lorsque la directive
.htaccess
,
Apache 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 qu'Apache 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
, Apache doit rechercher les
fichiers suivants :
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
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
httpd.conf
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 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 :
Note : "AllowOverride Options
" doit être présent
pour permettre l'utilisation de la directive ".htaccess
.
Dans le répertoire /www/htdocs/exemple1/exemple2
se
trouve un fichier .htaccess
contenant ce qui suit
:
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
.htaccess
, vous pouvez utiliser :
/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 .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
:
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é :
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 :
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 :
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 .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 d'Apache. Il vous indiquera probablement que la directive
utilisée dans votre fichier .htaccess
n'est pas
permise.
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
Le journal des erreurs peut aussi vous signaler une erreur de syntaxe dans l'usage de la directive elle-même.
Dans ce cas, le message d'erreur sera spécifique à l'erreur de syntaxe que vous avez commise.