.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...
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.
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...
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 !
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).
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
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.
Il existe aussi AuthGroupFile en complément à AuthUserFile.
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
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.
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
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.