[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Site Web
> Divers
> Le .htaccess et ses fonctionnalités
> Lecture du tutoriel
Le .htaccess et ses fonctionnalités
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Bonjour tout le monde !
Nous allons ici nous intéresser au fichier .htaccess qui peut servir à beaucoup de choses.
Je vais vous résumer son fonctionnement et quelques instructions très utiles.
Le .htaccess
Hein, quoi ? .htaccess ? Ça se mange ?
Alors tout d'abord, qu'est-ce qu'un .htaccess ?
Un .htaccess est un fichier qui sert à indiquer des commandes pour le serveur, c'est un fichier de configuration pour Apache.
Par exemple, il sert à protéger une page par un mot de passe ou encore à créer ses propres pages d'erreurs (les erreurs 401, 403, 404... etc.).
Et ça fonctionne comment ?
Un .htaccess placé dans un répertoire agit sur
ce répertoire et
tous les sous-répertoires qu'il contient.
Vous pouvez tout de même placer un autre .htaccess dans un des sous-répertoires de ce répertoire.
Je vais vous donner un exemple qui sera bien plus explicite que de longues paroles.
Exemple
Vous avez un répertoire nommé
Rep et qui contient les sous-répertoires
includes,
pages,
scripts.
Le répertoire
Rep contient un fichier .htaccess et le sous-répertoire
includes contient un autre .htaccess.
Bon : ce n'est pas très clair je vous l'accorde, rien de mieux donc pour comprendre la situation qu'un beau schéma.
C'est plus clair tout de suite, hein ?

On peut donc voir que le .htaccess situé dans le répertoire
Rep agit sur
le répertoire Rep et les sous-répertoires includes,
pages,
script.
Le .htaccess situé dans le répertoire
includes s'additionne à celui situé dans
Rep, mais si une instruction est réécrite, alors c'est elle qui s'applique au répertoire
includes.
Prenons un exemple
Le .htaccess situé dans
Rep a l'instruction
deny from all.
Ce qui signifie que l'accès est interdit à tout le monde pour les répertoires
Rep,
includes,
pages,
script.
Mais le .htaccess situé dans
includes a l'instruction
allow from all, qui signifie que le répertoire
includes est accessible à tous.
L'instruction
deny from all est donc
redéfinie par
allow from all, et
c'est cette instruction qui s'applique à
includes.
Voilà pour ce qui est du fonctionnement du .htaccess, passons à la suite...
Notez bien que vous ne pouvez pas créer de fichier nommé .htaccess sous Windows.
Il vous suffit donc de le nommer htaccess et de le renommer .htaccess lorsqu'il sera sur le serveur.
Vous pouvez également, dans tout éditeur de texte, enregistrer avec des guillemets dans le champ "Enregistrer sous", celà vous créera ainsi le fichier .htaccess directement sous Windows
Protéger un répertoire avec un .htaccess
Nous allons voir comment protéger un répertoire facilement à l'aide d'un .htaccess.
Voici le code :
Code : Apache1
2
3
4 | AuthUserFile /exemple/.htpasswd
AuthName "Accès protégé"
AuthType Basic
Require valid-user
|
AuthUserFile
C'est l'instruction pour
indiquer le chemin du fichier qui contient les mots de passe (.htpasswd).
Vous devez indiquer le chemin
absolu du fichier de mots de passe.
Pour connaître le chemin absolu du répertoire dans lequel vous allez placer votre fichier
.htpasswd, je vais vous citer la méthode à utiliser, décrite dans le tuto de M@teo21, qui est on ne peut plus claire (un peu modifiée pour qu'elle convienne à mon exemple) :
Citation : M@teo21
1. Créez un fichier appelé "chemin.php".
2. Mettez juste cette ligne de code dedans :
<?php echo realpath('chemin.php'); ?>
3. Envoyez ce fichier sur votre serveur avec votre logiciel FTP. Placez-le dans le dossier que vous voulez protéger.
4. Ouvrez votre navigateur et allez voir ce fichier PHP. Il vous donne le chemin absolu, par exemple
/exemple/chemin.php.
5. Copiez ce chemin dans votre .htaccess, et remplacez le "chemin.php" par ".htpasswd", ce qui nous donne au final par exemple :
/exemple/.htpasswd
6. Supprimez le fichier "chemin.php" de votre serveur, il ne nous sert plus à rien maintenant qu'il nous a donné le chemin absolu.
AuthName
Cette instruction sert à définir le texte qui invitera la personne à entrer ses identifiants.
AuthType Basic
AuthType Basic indique qu'il faut utiliser
AuthUserFile pour vérifier les mots de passe.
Ici, ce sera donc
.htpasswd qui sera lu pour vérifier les mots de passe.
Require valid-user
On indique que seuls les utilisateurs identifiés sont autorisés.
On peut également mettre
Require user Nom_de_l_utilisateur, par exemple, si l'on veut restreindre un répertoire à une seule partie des personnes inscrites sur la liste des mots de passe.
Oui, mais je les mets comment, moi, les mots de passe dans le fichier ?
Bonne question.
Eh bien là, c'est très simple, il vous suffit de créer un fichier de n'importe quel nom ; dans mon exemple, c'était le fichier
.htpasswd, car on appelle communément ce fichier
.htpasswd, mais vous pouvez l'appeler comme vous voulez (pour une fois qu'on vous laisse le choix

).
Donc, pour créer ce fichier, rien de plus simple : il vous suffit d'ouvrir... Bloc-notes (ou Notepad++, tant qu'à faire) !!
La syntaxe à utiliser pour indiquer les mots de passe est la suivante :
Pseudo:Mot_de_passe
Le mieux est de crypter les mots de passe à l'aide de la fonction
crypt de PHP.
Vous pouvez vous servir du formulaire utilisé dans le tuto deM@teo21 (encore une fois

), disponible
ici.
Certains serveurs n'acceptent pas le cryptage, comme Free par exemple.
Vous êtes donc obligés de laisser le mot de passe tel que vous devez le rentrer.
Rappel :
un bon mot de passe est composé de minuscules, de majuscules, de chiffres et doit être de préférence un mot qui ne soit pas dans le dictionnaire.
Avertissement pour les utilisateurs de serveurs Free :
l'instruction AuthUserFile doit être remplacée par PerlSetVar AuthFile.
Les mots de passe ne peuvent pas être cryptés à l'intérieur de votre fichier de mots de passe.
Voilà ; nous en avons fini pour ce qui est de protéger un répertoire.
Protéger un fichier avec un .htaccess
Bon, tu nous as expliqué comment protéger l'accès à un répertoire mais moi, j'aimerais juste protéger l'accès à un fichier : c'est possible ?
Bien sûr que c'est possible !
Et c'est même très simple. Il suffit d'utiliser la balise
<Files></Files>.
Je vous montre :
Code : Apache1
2
3
4
5
6 | <Files test.php>
AuthUserFile /exemple/.htpasswd
AuthName "Accès restreint"
AuthType Basic
require valid-user
</Files>
|
Bon, pour les instructions
Auth... pas besoin d'en reparler.
Par contre, c'est la balise
<Files></Files> qui est nouvelle.
C'est elle qui permet d'effectuer les instructions
juste pour un fichier.
Cette balise n'accepte qu'un seul fichier, vous aurez donc le même nombre de balises que de fichiers : si vous mettez plusieurs fichiers dans la même balise, Apache retournera une erreur.
Pour Apache 1.3 et supérieur, il est recommandé d'utiliser la balise <FilesMatch> au lieu de <Files>.
Et voilà encore une nouvelle technique apprise.
Rien de plus simple, une seule instruction et juste quelques chiffres qui changent.
Code : Apache1
2
3
4 | ErrorDocument 401 /erreurs/erreur_401.php
ErrorDocument 403 /erreurs/erreur_403.php
ErrorDocument 404 /erreurs/erreur_404.php
ErrorDocument 500 /erreurs/erreur_500.php
|
ErrorDocument
Vous vous en doutez, c'est l'instruction qui sert à dire que si l'erreur numéro XXX survient, on redirige vers la page d'erreur XXX.
Je pense ne pas pouvoir vous en dire plus si ce n'est vous donner les codes d'erreur les plus fréquents et ce à quoi ils correspondent.
400: Bad Request: la syntaxe de la requête est mal formulée.
401: Unhautorized: l'utilisateur n'a pas entré le bon mot de passe pour accéder au contenu.
403: Forbiden: l'accès au contenu est interdit.
404: Not Found: le document n'a pas été trouvé.
500: Internal Server Error: le serveur a rencontré une erreur interne (erreur de script ou erreur passagère).
503: Service Unvailable: le serveur ne peut pas répondre à cause d'une surcharge de trafic (trop de visiteurs).
Voilà, passons à la suite

.
Ce n'est pas très clair dit comme ça, mais vous allez tout de suite comprendre de quoi il s'agit.
Lorsque vous entrez une URL dans votre navigateur en tapant par exemple www.monsite.com, vous êtes automatiquement redirigés vers l'index, par exemple,
index.php.
Ici, il s'agit de configurer cette redirection :
Code : Apache1 | DirectoryIndex index.php index.html /erreurs/erreur_403.php
|
DirectoryIndex
Cette instruction a donc pour but de dire :
Si rien n'est entré, on redirige vers index.php ; s'il n'existe pas, on redirige vers index.html, s'il n'existe pas, on redirige vers erreur_403.php (qui est la page d'interdiction)
afin de ne pas afficher tout le contenu du dossier.
Voilà encore une particularité terminée ; on passe à la dernière et après, vous serez des pros du .htaccess.
Ces 3 techniques reposent sur la notion de type MIME (Multipurpose Internet Mail Extensions).
Et c'est quoi, un type MIME ?
Un type MIME est un standard utilisé pour
définir la nature d'un document.
Par exemple, pour un fichier
exemple.jpg, le type MIME est :
Content-type: image/jpeg
Ici, le fichier est donc une
image, et plus précisément une image de type
JPEG.
Chaque transfert entre le serveur et le client (votre navigateur) débute par le type MIME du fichier que vous avez "appelé".
Ainsi, lorsque vous chargez une page de type
html, le serveur débute le transfert par
Content-type: text/html.
Maintenant que vous savez ce qu'est le type MIME, revenons au .htaccess.
AddType
La fonction
AddType a pour but, la plupart du temps, d'
indiquer au navigateur comment interpréter un fichier dont l'extension est
inconnue.
Par exemple pour un fichier ayant l'extension
.dwg, le navigateur ne sait pas a quoi correspond le fichier.
On peut donc écrire dans le fichier
.htaccess :
Code : Apache1 | AddType application/acad dwg
|
Le navigateur ouvrira donc le logiciel en association avec l'extension
.dwg, en l'occurrence Autocad,
si celui ci est installé sur l'ordinateur du client.
Cette commande permet également de
changer une action normalement prédéfinie.
Par exemple, en entrant le code suivant dans le
.htaccess :
Code : Apachele navigateur interprètera le fichier
html comme si c'était une image de type
jpeg.
ForceType
Cette fonction agit un peu comme la fonction
AddType sauf qu'elle
agit sur tout le répertoire où est placé le
.htaccess.
Ainsi, si vous écrivez dans votre
.htaccess :
Code : Apachetous les fichiers présents dans le répertoire du
.htaccess seront considérés comme des fichiers
jpeg.
DefaultType
DefaultType est tout simplement destiné à définir l'action qui sera effectuée par le navigateur lorsque il rencontrera un fichier inconnu.
Le code suivant aura par exemple pour effet d'interpréter n'importe quel fichier inconnu comme un fichier de type
html.
Code : Apache
Ces 3 fonctions n'ont plus de secret pour vous

, vous pouvez passer à la suite.
Le principe du fichier est d'interdire au visiteur toutes les pages et de le rediriger vers une page de maintenance.
Voici donc la structure du .htaccess :
Code : Apache1
2
3
4
5
6 | ErrorDocument 403 /maintenance.html
deny from all
allow from xx.xxx.xxx.xxx
<Files maintenance.html>
allow from all
</Files>
|
Oué m'enfin là, je ne comprends pas grand-chose à ce qu'on a marqué.
Ne vous inquiétez pas, on va expliquer

:
ErrorDocument 403 /maintenance.html
On définit le fichier d'erreur 403 (l'erreur 403 est l'erreur qui indique que l'accès est interdit) comme étant la page
maintenance.html : le site va donc afficher cette dernière lorsque la page est "interdite" (à la place du message
Error 403 Forbidden).
deny from all
Là, ce n'est pas compliqué : on interdit tout simplement l'accès à tout le répertoire dans lequel se trouve le .htaccess.
allow from xx.xxx.xxx.xxx
Bah, effectivement, si c'est interdit, le webmaster ne peut pas y accéder non plus, il faut donc autoriser l'IP ou les IP "xx.xxx.xxx.xxx".
<Files maintenance.html>
allow from all
</Files>
Et là on autorise à tout le monde le droit de voir le fichier
maintenance.html.
Voilà, je crois que c'est bon, il ne vous reste qu'à placer ce fichier à la racine de votre site lorsque vous voulez le mettre en maintenance.
Après, vous pouvez le mettre dans un répertoire spécial pour ne fermer qu'une seule partie.
Quoi, encore ?? Tu ne nous avais pas dit que c'était fini ?
Si, mais... Je vous donne une option en bonus.
Je n'en ai pas parlé plus haut parce que ce n'est pas nécessairement utile, mais vous pouvez utiliser la balise
<Limit></Limit> qui sert à
limiter les opérations permises.
Je m'explique.
Vous pouvez mettre la balise
<Limit></Limit> autour de l'instruction
Require.
Cette balise prend pour arguments
GET et
POST, et s'écrit
<Limit GET POST></Limit>.
GET et POST doivent bien être mis en majuscules.
Cette balise permet de définir le type de méthode du protocole HTTP auquel la restriction est appliquée.
Cette fois-ci, c'est bien terminé.
L'URL Rewriting est une fonctionnalité très intéressante du .htaccess qui améliore beaucoup la navigation et également le référencement (même si c'est un peu moins vrai maintenant). Toutefois, il reste plus esthétique pour le visiteur.
Je ne vais pas développer cette partie car je trouve qu'il a été bien traité par
Captain MDS dans son tuto.
Vous pouvez donc le consulter
ici.
Voilà : j'ai essayé de vous résumer le plus simplement possible le fonctionnement du .htaccess et ses principales fonctions.
J'espère que ça vous aura été utile.
Si vous avez une question ou une correction à faire sur mon tuto, n'hésitez pas à
m'envoyer un MP.
Vous pouvez trouver la documentation Apache 2.2 sur le .htaccess
ici.
Merci à
ptipilou et à toute l'équipe des zCorrecteurs ainsi qu'à celle des validateurs pour leur relecture attentive et leurs conseils.