FAQ du serveur HTTP ApacheConsultez toutes les FAQ

Nombre d'auteurs : 9, nombre de questions : 47, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireConfiguration généraleLes fichiers htaccess

Il s'agit d'un fichier à mettre dans le répertoire qui est accessible sur internet et qui permet de modifier sa configuration. Il est possible de faire les modifications suivantes :

Sous Windows, vous ne pouvez pas créer de fichier commençant par un point donc appelez le "htaccess.txt" par exemple, transférez le sur le serveur et renommez le en ".htaccess" sur le serveur.

Créé le 17 décembre 2008  par mathieu

Lien : Tutoriel : Les principales utilisations du htaccess avec Apache

Ce sont des directives AllowOverride, renseignées par l'administrateur dans le fichier de configuration d'Apache, qui définissent quelles sont celles que l'on peut ou non placer dans un fichier .htaccess afin de limiter l'usage de ces derniers. Toute directive d'un fichier .htaccess non autorisée par l'administrateur sera alors ignorée (non traitée) par le serveur. Sa ou ses valeurs possibles (car cumulables) sont :

  • AuthConfig : pour tout ce qui est lié à l'authentification ;
  • FileInfo : concerne les contrôles de type de document ainsi que tout ce qui touche les entêtes HTTP. Citons, pour exemples connus, la réécriture et la gestion des erreurs (ErrorDocument) ;
  • Indexes : relatif à l'indexation des répertoires (tel DirectoryIndex) ;
  • Limit : permet la mise en place de contrôle d'accès sur l'adresse du client (trio Order, Allow, Deny);
  • Options : rend possible la redéfinition de la directive du même nom.

Les valeurs particulières tout ou rien complètent la liste précédente :

  • All : le fichier .htaccess ne fait l'objet d'aucune restriction ;
  • None : tout fichier .htaccess ne sera même pas lu.

Cependant, ayant jusque là volontairement laissé de côté le contexte d'application de la directive AllowOverride, l'explication a été quelque peu simplifiée. Corrigeons à présent le tir. En effet, il faut savoir qu'elle se définit par rapport à un(des) répertoire(s) (donc à des blocs <Directory>...</Directory>) et qu'en son absence, le répertoire héritera des "permissions" de son parent, qui lui-même peut les tenir de son propre père.

Illustration : soit l'arborescence, schématique (voir explications plus bas), représentée ci-dessous :

 
Sélectionnez

/
    DocumentRoot
        forum

Le répertoire / représente la racine de votre système de fichiers (même sous Windows, considérez cela comme correspondant à votre Poste de travail). Etant le père de tout répertoire, c'est ici qu'il convient de définir votre politique, restrictive, par défaut afin d'ignorer les fichiers .htaccess hors partie web :

 
Sélectionnez

<Directory />
    AllowOverride None
    # ...
</Directory>

Quant au répertoire correspondant à votre DocumentRoot, il vous permettra de spécifier un comportement plus ouvert appliqué par défaut sur l'ensemble de la partie que votre serveur publie. Ci-bas, un exemple autorisant, par défaut, aux usagers uniquement les contrôles d'accès, l'identification et l'indexation des répertoires :

 
Sélectionnez

<Directory DocumentRoot> # Remplacer DocumentRoot par sa valeur
    AllowOverride AuthConfig Indexes Limit
    # ...
</Directory>

Enfin, dans la continuité de notre cas de figure, pour les besoins du forum en réécriture, nous ajoutons spécifiquement le droit FileInfo à cet endroit. Ce qui nous donne donc :

 
Sélectionnez

<Directory DocumentRoot/forum> # Remplacer DocumentRoot par sa valeur
    AllowOverride AuthConfig FileInfo Indexes Limit
</Directory>

Toutes les directives ne sont pas utilisables dans un fichier .htaccess pour des raisons techniques notamment, de sécurité ou de performance. Vous pourrez trouver le détail de chacune d'elle dans la documentation d'Apache (à la ligne Context).

Chaque directive est rattachée à un module. Si ce module n'est pas disponible sur votre serveur alors une erreur 500 (Internal Error) sera (aussi) déclenchée étant donné qu'elle ne sera pas reconnue.

Créé le 17 décembre 2008  par julp

Commencez par créer un fichier .htaccess indiquant qu'une authentification sera requise :

 
Sélectionnez

AuthUserFile "/chemin/complet/vers/le/fichier/.htpasswd"
AuthName Authentification
AuthType Basic
Require valid-user

Générer ensuite le fichier contenant la liste des couples login/mot de passe à l'aide de l'utilitaire htpasswd :

 
Sélectionnez
# Pour la première personne
htpasswd -cs .htpasswd login1
 
# Pour les personnes suivantes
htpasswd -s .htpasswd login2

L'option c crée le fichier. Elle ne doit être utilisée qu'à la création du premier compte sinon vous écraseriez le fichier. L'option s spécifie que les mots de passe seront stockés sous forme hachée avec l'algorithme appelé SHA1. Vous pouvez remplacer celle-ci par m pour utiliser l'algorithme MD5, d pour CRYPT ou p pour que ceux-ci apparaissent en clair.

Ces directives d'un fichier .htaccess ne sont effectives que si le répertoire concerné dispose de la valeur AuthConfig ou All pour sa sous-directive AllowOverride.

Le fichier faisant office de "base de données" des identifiants se nomme par convention .htpasswd et n'est par défaut pas lisible par un quelconque utilisateur au même titre qu'un fichier .htaccess.

L'hébergeur gratuit Free.fr est bien plus exigeant. Reportez-vous à Comment mettre en place une authentification chez Free ? de sorte à prendre connaissance de ses particularités.

Créé le 17 décembre 2008  par julp

Lien : Tutoriel : Les principales utilisations du htaccess avec Apache

Oui mais le chemin indiqué à la directive AuthUserFile sera relatif non pas par rapport au répertoire contenant le fichier .htaccess mais sera toujours lié à la racine du serveur (déterminée par la valeur de la directive ServerRoot).

Créé le 17 décembre 2008  par julp

Il suffit de mettre le code suivant dans un fichier '.htaccess' dans le répertoire à protéger :

 
Sélectionnez
Options -Indexes

De cette façon le listage de tous les sous-répertoires sera aussi interdit.

Cette directive peut aussi se placer dans un bloc "Directory" dans le fichier de configuration du serveur.

Créé le 17 décembre 2008  par mathieu

Pour interdire l'accès à l'ensemble des fichiers portant une extension inc ou xml nous aurons besoin de recourir aux expressions régulières :

 
Sélectionnez

<FilesMatch "\.(inc|xml)$">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

Le point est échappé (précédé d'un antislash) car en temps normal il correspond à n'importe quel caractère. La barre verticale suggère une alternative (inc ou xml) et enfin le dollar signifie la fin du nom du fichier.

Cette directive ne sera effective uniquement si le répertoire, éventuellement par héritage, contenant ce fichier htaccess le permet via la directive AllowOverride qui doit au minimum posséder la valeur Limit.

Créé le 17 décembre 2008  par julp

Une version 2.0.51 est au minimum requise ici !

La solution consiste alors en la combinaison de trois éléments :

  • Distinguer la partie soumise à l'authentification de celle qui ne l'est pas. Pour ce faire, on utilisera les directives <Files> ou <FilesMatch> pour séparer les exceptions ;

  • Autoriser le client, pour ces ressources, à y avoir accès grâce à une règle Allow from all ;

  • Se pose maintenant le problème suivant : lorsqu'une partie d'un site est soumise à la fois à des politiques d'accès (via des règles Allow et Deny) et à une authentification (Require), le comportement par défaut vis à vis du client est tel qu'il doit remplir ces deux conditions.

    Il est donc nécessaire à ce stade d'indiquer à Apache qu'une seule des conditions suffit à donner accès au document demandé. Ceci se gère via la directive Satisfy, dont les valeurs sont :

    • All (par défaut) : le client doit satisfaire les politiques d'accès et l'authentification HTTP ;
    • Any : une seule des deux suffit.

    On choisira donc la dernière de sorte à ce que notre règle visant à autoriser tout le monde (Allow from all) prévale sur l'identification.

    Pour illustrer, voici le fichier .htaccess à écrire pour que l'authentification HTTP s'applique à toutes les pages sauf à notre index :

     
    Sélectionnez
    
    <Files index.php>
        Satisfy Any
        Allow from all
    </Files>
     
    AuthUserFile /.../.htpasswd
    AuthName Authentification
    AuthType Basic
    Require valid-user
Créé le 17 décembre 2008  par julp

Pour interdire l'accès aux images, par exemple, que l'on héberge depuis un site extérieur, on se base sur l'origine du client, qu'il indique par l'entête appelée HTTP_REFERER :

  • A l'aide de la réécriture d'URL :

     
    Sélectionnez
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_REFERER} !^$
        RewriteCond %{HTTP_REFERER} !^http://.*\.nom_de_domaine\.fr/ [NC]
        RewriteRule \.(gif|jpe?g|png)$ - [F,NC] # Vous pouvez remplacer F par R=403
    </IfModule>
  • En combinant les directives SetEnvIfNoCase et FilesMatch :

     
    Sélectionnez
    
    SetEnvIfNoCase Referer "^https?://([^/]*)?nom_de_domaine\.fr/" local_ref=1 
    SetEnvIf Referer ^$ local_ref=1
     
    <FilesMatch "\.(jpe?g|gif|png)$">
        Order allow,deny
        Allow from env=local_ref
    </FilesMatch>

Ces moyens, basés sur le référant, n'ont absolument rien de fiable, puisque cet entête peut être omis voir faussé par le client.

Créé le 17 décembre 2008  par julp
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.