.htaccess

 

Introduction

Les fichiers .htaccess sont des fichiers gérés par des serveurs WEB à base d'Apache. Ce sont des fichiers textes qui pourront donc être lus avec un simple Bloc-notes...

Image non trouvée !Ce genre de nom de fichier est typiquement ce que l'on peut trouver sur un système Unix (il s'agit d'une solution pour "cacher" des fichiers). Attention cependant pour les utilisateurs Windows, cette manière d'écrire des noms de fichiers n'est pas vraiment courante. Sous explorateur, le fichier n'aura pas de nom, le type sera .htaccess. De plus, certains programmes Windows peuvent refuser de créer ce genre de fichiers.

Image non trouvée !Avec le bloc-notes, vérifiez qu'il ne sauve pas votre fichier sous le nom .htaccess.txt, car il ne sera pas reconnu et donc non utilisé sous Apache...

Image non trouvée !Suivant la configuration du serveur Apache, tout ce qui est indiqué ici ne fonctionnera pas forcement...J'indique d'ailleurs ceci pour ceux qui sont chez Free !

Image non trouvée !Par sécurité, toutes erreurs sur un fichier .htaccess bloquera l'accès à tous les utilisateurs voulant accéder à la partie du site sur lequel ce fichier est positionné. Généralement, un code erreur 500 sera remonté du serveur (Erreur interne).

Image non trouvée !Enfin, vérifiez que vous avez toujours bien fait un retour chariot sur la dernière ligne de paramètrages du fichier, sinon elle risque fort de ne pas être prise en compte !

 

Les fichiers .htaccess sont utilisés dans les cas suivant:

- Gérer l'accès à certains répertoires ou fichiers d'un site web.

- Définir des pages d'erreurs personnalisées.

- Ajouter un mime-type.

- et bien d'autres choses...

 

Vous placerez votre fichier .htaccess dans le répertoire de votre site ou celui-ci doit commencer à agir. Sachant que tous les répertoires descendants hériteront automatiquement des paramètres déclarés dans l'un de ces répertoires parents. Il sera possible de déclarer d'autres fichiers .htaccess dans les sous répertoires. Seules les paramètres réécrits seront changés et effectifs dans les nouveaux sous-répertoires (Principe d'héritage).

Limitation des effets du fichier .htaccess

Sous Apache, le fichier .htaccess est le dernier fichier de configuration d'un site. D'autres fichiers de configuration auront été lus au préalable. Or l'option AllowOverride dans la directive <Directory> permet de limiter voire d'interdire les possibilités offertes par un fichier .htaccess. Tout dépendra donc de ce que va autoriser l'administrateur du serveur Apache.

 

Gérer l'accès à certains répertoires ou fichiers

C'est l'une des trois raisons principales de l'utilisation de ce fichier:

Il existe deux solutions pour gérer l'accès: Restrictions d'accès, ou l'authentification par mot de passe.

 

Restrictions d'accès par IP pour Apache v2.2

Vous pouvez interdire ou autoriser l'accès à votre site pour certaines adresses IP.

Pour interdire une adresse IP deny from IP:

deny from 140.128.14.1

Inversement, pour autoriser une adresse IP allow from ip:

allow from 140.128.14.2

 

Il est possible aussi d'indiquer des plages d'adresses:

Si vous n'indiquez qu'une partie du début d'une adresse IP, celle-ci sera considéré comme indiquant des plages d'adresses IP.

Par exemple allow from 140.128

 

Si vous voulez autoriser toute la plage 140.128, mais interdire 140.128.14.1, il faudra alors indiquer les lignes suivantes

order allow,deny
deny from 140.128.14.1 # on interdit 140.128.14.1
allow from 140.128 # on autorise tout le monde ayant une ip commençant par 140.128.

La commande order a ici toute son importance, car la commande allow autorise tout le monde, mais nous ne voulons pas qu'une adresse IP puisse y accéder. Cette commande fera donc exécuter d'abord la commande allow, puis ensuite la commande deny.

 

Il sera possible d'utiliser des noms (partielles ou non) de domaines plutôt que des adresses IP

Deny from .gov microsoft.com

 

Enfin, vous pouvez interdire ou autoriser l'accès à un répertoire pour tout le monde, en utilisant le paramètre all

Par exemple:

deny from all

Restrictions d'accès par IP pour Apache v2.4

order, deny et allow sont obsolète et devrait disparaître dans les prochaines versions.

Il faut utiliser Require à la place (module mod_authz_host).

Order deny,allow
Deny from all

devient

Require all denied

 

Order allow,deny
Allow from all

devient

Require all granted

 

Order Deny,Allow
Deny from all
Allow from microsoft.com

devient

Require host microsoft.com

De façon général:

Require host address // Pour un host
Require ip ip.address // Pour une ip

Exemple pour interdire une ip:

<RequireAll>
Require all granted
Require not ip 140.128.14.1 // Dans le sens toutes ip différentes de ... (si je n'ai pas l'ip 140.128.14.1)

Require not host microsoft.com // Pour interdire tout ce qui contient le domaine microsoft.com

Require not ip 192.169.1 // Interdire toutes les ip 192.169.1.n
</RequireAll>

 

Restrictions d'accès sur un fichier

Il est possible de limiter l'accès sur un fichier. Il suffira d'utiliser les balises <Files nomFichier> </Files>

Exemple, interdire l'accès à un fichier:

Sous Apache 2.2

<Files nomFichier>
order allow,deny
deny from all
</Files>

Sous Apache 2.4

<Files nomFichier>
Require all denied
</Files>

 

Ou encore interdire l'accès à des fichiers en utilisant le joker.

Sous Apache 2.2

<Files *.gif>
order allow,deny
deny from all
</Files>

Sous Apache 2.4

<Files *.gif>
Require all denied
</Files>

Il n'est malheureusement pas possible de mettre une liste de fichiers...

 

Authentification par mot de passe

Il est possible de demander une authentification par mot de passe sur certains répertoires.

Il faudra donc que le serveur puisse vérifier les mots de passe saisis. Il lui faudra alors un fichier contenant ces mots de passe par utilisateur.

- Si vous avez votre serveur Apache, utilisez la commande htpasswd:

Un exemple:

htpasswd -c .htpasswd toto

Ceci va créer à la fois .htpasswd et l'utilisateur toto, pour lequel vous sera demandé un mot de passe.

man sur htpasswd pour le détail de la commande.

 

- Il est possible aussi d'utiliser un simple bloc-notes:

Dans ce cas, la syntaxe du fichier est le suivant:

nom_utilisateur:mot_de_passe

 

Le mot de passe pourra être mis en clair (ce sera le cas chez Free). Evidemment, vous pourrez remettre en cause la sécurité...Mais il s'agit là d'un tout autre débat.

 

Ce fichier, vous le stockerez ensuite dans un répertoire. Mais ce répertoire ne devra surtout pas être accessible par monsieur tout le monde. Il faudra donc placer dans ce répertoire un fichier .htaccess avec les lignes suivantes (vu dans les paragraphes précédents):

Sous Apache 2.2

order allow,deny
deny from all

Sous Apache 2.4

Require all denied

Maintenant que le fichier est créé, il suffit d'identifier ce fichier dans le .htaccess qui sera placé dans le répertoire que vous voulez verrouiller.

La syntaxe est alors la suivante:

AuthType Basic
AuthUserFile /chemin/fichier_des_mots_passe
AuthName "Entrez votre mot de passe" # ici vous indiquerez ce qui figurera dans la barre de titre de la dialogue permettant la saisie du mot de passe.

require valid-user

 

Pour générer le contenu du fichier des mots de passe, utilisez la commande htpasswd

Pour créer le fichier et ajouter un utilisateur

htpasswd -c -b fichier_mots_de_passe utilisateur mot_de_passe

ou pour ajouter simplement un utilisateur

htpasswd -b fichier_mots_de_passe utilisateur mot_de_passe

 

Image non trouvée ! Chez Free, la commande AuthUserFile devra être remplacée par PerlSetVar AuthFile fichier_des_mots_de_passe
AuthName "Entrez votre mot de passe"
AuthType Basic
require valid-user

Ce fichier des mots de passe devant être mis en clair !!!

La commande PerlSetVar va vous permettre d'indiquer que le nom de répertoire et fichier indiqués après AuthUserFile sera indiqué avec un chemin relatif par rapport à votre site Free.

La commande AuthFile fichier_des_mots_de_passe permettant d'indiquer l'emplacement d'un fichier utilisateur:mot de passe.

Image non trouvée !Il existe aussi AuthGroupFile en complément à AuthUserFile.

 

Image non trouvée !Vous pouvez pratiquement utiliser un fichier mot de passe par répertoire, mais déjà avec un fichier, la gestion du fichier des mots de passe peut vite devenir lourde si vous voulez gérer plusieurs utilisateurs. Alors n'en abusez pas trop tout de même !

 

 

Gérer les erreurs dans votre site

Vous allez pouvoir gérer les erreurs qui se produises sur votre site. Au lieu d'avoir la page par défaut (pas belle) qui s'affiche, vous pourrez la personnaliser.

Il suffit d'indiquer la ligne suivante dans votre fichier:

ErrorDocument (code [nom du fichier ou texte ou url])

avec code, un code erreur HTTP sur 3 positions.

Par exemple, vous voulez traiter les codes 401 pour utilisateur non autorisé, 404 pour page non trouvée. Vous aurez donc dans votre fichier .htaccess les lignes suivantes:

ErrorDocument 401 /erreurs/401.htm
ErrorDocument 404 /erreurs/404.htm

ou

ErrorDocument 404 "Erreur - Page absente !"

Il faudra bien évidemment créer les deux fichiers 401.htm et 404.htm dans le répertoire /erreurs...

Voici un exemple sur ce site (que vous avez peut-être déjà vu...), si vous cliquez sur ce lien bidon.

 

Changer le fichier index par défaut

Par défaut, Apache recherche les fichiers index.html puis index.htm lorsque dans une URL, l'utilisateur n'a pas indiqué le nom d'une page.

Cela évite ainsi à cet utilisateur :

Premièrement : à connaître les pages des sites !

Deuxièmement : Que l'utilisateur ne se retrouve avec la liste de tous les fichiers présents dans le chemin indiqué dans le navigateur ! L'utilisateur n'a pas à voir votre architecture !

 

La syntaxe pour effectuer ce type d'opération est la suivante :

DirectoryIndex (fichier1 fichier2 fichier3 ...)

Où fichierX est une liste de fichiers à chercher. Le séparateur étant l'espace.

DirectoryIndex index.php index.html index.phtml /erreurs/403.html

Image non trouvée !Si aucun des fichiers cités précédemment n'est trouvé, alors lance la page 403.html qui veut dire : Vous n'êtes pas autorisé à accéder à cette ressource !

 

Quelque soit le répertoire, l'utilisateur ne pourra plus lister les fichiers.

Image non trouvée !Cette commande ne marche pas chez Free, vous aurez systématiquement un code 500 en retour. En effet, la liste des fichiers index est prédéfinie et n'est pas modifiable. La liste est la suivante: index.html, index.htm et index.php

Pour résoudre le problème de listage des fichiers, il y a une possibilité: La commande options +/-indexes dont l'explication va suivre. Chez Free, il faudra faire ceci dans votre fichier .htaccess:

options -indexes

ErrorDocument 403 /erreurs/403.htm

 

Image non trouvée !Si DirectoryIndex ou options +/-indexes ne sont pas reconnues, il n'y a alors plus qu'une solution: définir un fichier index dans tous vos sous-répertoires !

 

Lister les fichiers ou non ?

Par défaut, Apache liste tous les fichiers d'une page s'il ne trouve page de fichier index. Il est possible de paramétrer ce fonctionnement:

options -indexes va retirer cette possibilité d'afficher les fichiers.

options +indexes va réactiver cette possibilité.

 

Gérer les informations à afficher lors du listing des fichiers

Lorsqu'un répertoire n'a pas de fichier index (html, htm ou autres...), Apache liste le contenu du répertoire (suivant le paramètrage que vous lui aurait donné).

Des informations par défaut sont alors données. Vous pouvez modifier ces informations !

La syntaxe est la suivante : IndexOptions FancyIndexing <options>.

Les options sont les suivantes:

Commande Désignation
IconsAreLinks Les icônes qui renseignent le type de fichier deviennent des liens
ScanHTMLTitles La description des fichiers reprend le titre des documents HTML
SuppressSize Ne pas afficher la taille
SuppressDescription Ne pas afficher la description
SuppressLastModified Ne pas afficher la date de dernière maj
AddDescription Préciser une description pour 1 ou plusieurs fichiers

 

Exemple, Afficher la liste des images sans la date de dernière maj avec une description pour les fichiers répondant aux filtres
IndexOptions SuppressLastModified FancyIndexing
AddDescription "Ma première image" 1.gif
AddDescription "Ma seconde image" 2.gif

 

Redirections

Les redirections sont particulièrement utiles quand vous modifiez l'architecture de votre page Web.

RedirectPermanent /titi.html http://www.tata.tutu.html # rediriger un fichier

RedirectPermanent /toto http://www.tata # rediriger un répertoire complet

Il est possible de rediriger simplement un fichier ou tout un répertoire.

 

type MIME

Il est possible de définir le type MIME sur une extension de fichier, ce qui aura pour effet de changer la manière de proposer ce fichier à l'utilisateur sur le navigateur.

Par exemple, un fichier .txt s'affiche directement sur un navigateur. Si vous voulez que l'utilisateur le télécharge plutôt que de voir son contenu, il faudra changer son typeMime.

Pour cela nous utiliserons:

AddType typeMime fichier

Dans mon exemple, on pourra faire ceci

AddType application/octet-stream .txt

Dès lors, les fichiers txt seront considérés comme de simples fichiers de type octet-stream et seront téléchargeables directement.

 

La suite

Il y a encore des choses à dire comme la commande satisfy, ... A venir.

 

Le fichier .htaccess ne semble pas interprété !

C'est possible, en effet que le fichier .htaccess ne soit pas interprété. Cela dépend du paramètrage de AllowOverride effectué en amont.