2002-12-10 00:10:50 +01:00
|
|
|
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
|
|
|
<!DOCTYPE html
|
|
|
|
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
|
|
|
"tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>.htaccess</title>
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>Configurer un serveur Apache avec .htaccess</h1>
|
|
|
|
|
|
|
|
|
|
<h2>Qu'est-ce que c'est ?</h2>
|
|
|
|
|
|
|
|
|
|
<p><code>.htaccess</code> est un simple fichier texte qui vous permet
|
|
|
|
|
de g<>rer de mani<6E>re d<>centralis<69>e un serveur Apache (le serveur des
|
|
|
|
|
<EFBFBD>l<EFBFBD>ves, par exemple). Par exemple, <code>.htaccess</code> vous permet
|
|
|
|
|
de prot<6F>ger certains r<>pertoires avec des mots de passe, de
|
|
|
|
|
restreindre l'acc<63>s <20> votre page Web, d'emp<6D>cher le listage de vos
|
|
|
|
|
r<EFBFBD>pertoires (quand ils ne contiennent pas de fichier index.html), ou
|
|
|
|
|
encore d'utiliser vos propres pages d'erreur (404, 403)...</p>
|
|
|
|
|
|
2003-05-15 12:41:10 +02:00
|
|
|
|
<div class="attention">Les exemples donn<6E>s ici marchent pour le
|
|
|
|
|
serveur Apache du serveur des <20>l<EFBFBD>ves de l'ENS. Il ne marchera
|
|
|
|
|
peut-<2D>tre pas avec une autre configuration d'Apache. En cas de doute,
|
|
|
|
|
demandez <20> votre administrateur syst<73>me.</div>
|
|
|
|
|
|
2002-12-10 00:10:50 +01:00
|
|
|
|
<p>Les directives d'un <code>.htaccess</code> s'appliquent <20>
|
|
|
|
|
l'ensemble des fichiers du r<>pertoire dans lequel il est plac<61>, ainsi
|
|
|
|
|
qu'aux sous-repertoires. <code>.htaccess</code> est lu <20> chaque
|
|
|
|
|
requ<EFBFBD>te du serveur, donc chaque modification prend effet
|
|
|
|
|
imm<EFBFBD>diatement.</p>
|
|
|
|
|
|
|
|
|
|
<div class="attention">Attention, la moindre erreur dans votre
|
|
|
|
|
<code>.htaccess</code> causera une erreur serveur et emp<6D>chera tout
|
|
|
|
|
acc<EFBFBD>s <20> votre site. V<>rifiez donc bien que tout marche bien <20> chaque
|
|
|
|
|
modification de ce fichier. Une consultation des logs de webmaster
|
|
|
|
|
(<code>/opt/webmaster/var/log/error_log.curr</code>) vous aidera <20>
|
|
|
|
|
diagnostiquer ce qui ne marche pas.</div>
|
|
|
|
|
|
|
|
|
|
<p>Pr<50>cisons enfin que chaque ligne commen<65>ant par un di<64>se (#) est
|
|
|
|
|
ignor<EFBFBD>e, ce qui vous permet de commenter vos directives.</p>
|
|
|
|
|
|
|
|
|
|
<h2>Personnalisez vos pages d'erreur</h2>
|
|
|
|
|
|
|
|
|
|
<p>Tout le monde conna<6E>t bien les pages d'erreur 404 (File Not Found),
|
|
|
|
|
403 (Forbidden), 500 (Internal Server Error)... Il peut <20>tre utile de
|
|
|
|
|
personnaliser ce type de pages d'erreur (surtout les erreurs 404), par
|
|
|
|
|
exemple pour demander <20> l'internaute de vous signaler les liens
|
|
|
|
|
cass<EFBFBD>s, ou pour lui proposer de faire une recherche sur le site (il
|
|
|
|
|
existe un <a href="http://www.eleves.ens.fr/search.html">moteur
|
|
|
|
|
Google</a> pour le serveur des <20>l<EFBFBD>ves).</p>
|
|
|
|
|
|
|
|
|
|
<p>D'abord, cr<63>ez vos propres pages d'erreur. Ensuite, dans votre
|
|
|
|
|
fichier <code>.htaccess</code>, <20>crivez :</p>
|
|
|
|
|
|
|
|
|
|
<pre>ErrorDocument numero_d'_erreur /chemin/du/fichier.html</pre>
|
|
|
|
|
|
|
|
|
|
<p>Il est plus simple de nommer vos pages 403.html, 404.html, etc., ce
|
|
|
|
|
qui donne :</p>
|
|
|
|
|
|
|
|
|
|
<pre>ErrorDocument 404 /home/toto/404.html</pre>
|
|
|
|
|
|
|
|
|
|
<p>Voici quelques unes des erreurs les plus courantes :</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li> 401 : Authorization required</li>
|
|
|
|
|
<li> 403 : Forbidden</li>
|
|
|
|
|
<li> 404 : Not Found</li>
|
|
|
|
|
<li> 406 : Request Timed Out</li>
|
|
|
|
|
<li> 500 : Internal Server Error</li>
|
|
|
|
|
<li> 503 : Service Unavailable</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<h2>Redirections</h2>
|
|
|
|
|
|
|
|
|
|
<p>Les redirections sont particuli<6C>rement utiles quand vous modifiez
|
|
|
|
|
l'architecture de votre page Web. Par exemple, vous avez d<>cid<69> de
|
|
|
|
|
ranger tous vos expos<6F>s dans un r<>pertoire
|
|
|
|
|
<code>~/www/exposes/</code>. Vous souhaitez que quelqu'un qui veut
|
|
|
|
|
acc<EFBFBD>der <20> l'ancien <code>~/www/expose1.html</code> soit rerout<75> vers
|
|
|
|
|
la nouvelle adresse, <code>~/www/exposes/1.html</code>.</p>
|
|
|
|
|
|
|
|
|
|
<p>Ceci est <20> sp<73>cifier dans votre <code>.htaccess</code> :</p>
|
|
|
|
|
|
2003-07-07 18:24:31 +02:00
|
|
|
|
<pre>RedirectMatch permanent /home/toto/expose1.html /home/toto/exposes/1.html</pre>
|
2002-12-10 00:10:50 +01:00
|
|
|
|
|
|
|
|
|
<p>Et ainsi de suite pour tous les fichiers concern<72>s.</p>
|
|
|
|
|
|
|
|
|
|
<h2>Jouer avec les index de r<>pertoires</h2>
|
|
|
|
|
|
|
|
|
|
<p>Quand un r<>pertoire ne contient pas de fichier index.html (ou
|
|
|
|
|
index.htm), Apache liste le contenu du r<>pertoire, en donnant quelques
|
|
|
|
|
informations, typiquement la taille des fichiers. Mais il est possible
|
|
|
|
|
de sp<73>cifier d'autres informations, comme la date de derni<6E>re
|
|
|
|
|
modification, et d'ajouter une courte description de chaque
|
|
|
|
|
fichier.</p>
|
|
|
|
|
|
|
|
|
|
<p>La syntaxe est la suivante : <code>IndexOptions FancyIndexing
|
|
|
|
|
<autres directives></code>. Ces autres directives sont les
|
|
|
|
|
suivantes :</p>
|
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><code>IconsAreLinks</code></dt>
|
|
|
|
|
<dd>Les ic<69>nes qui renseignent le type de fichier deviennent aussi des
|
|
|
|
|
liens</dd>
|
|
|
|
|
<dt><code>ScanHTMLTitles</code></dt>
|
|
|
|
|
<dd>On utilise pour la description des fichiers le titre des documents
|
|
|
|
|
HTML.</dd>
|
|
|
|
|
<dt><code>SuppressSize</code></dt>
|
|
|
|
|
<dd>Supprime l'indication de taille des fichiers</dd>
|
|
|
|
|
<dt><code>SuppressDescription</code></dt>
|
|
|
|
|
<dd>Supprime la description</dd>
|
|
|
|
|
<dt><code>SuppressLastModified</code></dt>
|
|
|
|
|
<dd>Supprime la date de derni<6E>re modification</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
<p>Exemple : vous avez un r<>pertoire d'images appel<65>
|
|
|
|
|
<code>~/www/images/</code>, vous souhaitez avoir la taille et la
|
|
|
|
|
description de chacune des images. Vous en profitez pour supprimer la
|
|
|
|
|
date de derni<6E>re modification, qui ici vous importe peu et prend de la
|
|
|
|
|
place.</p>
|
|
|
|
|
|
|
|
|
|
<pre>IndexOptions SuppressLastModified FancyIndexing
|
|
|
|
|
AddDescription "Le bassin aux Ernests" images/ernests.gif
|
|
|
|
|
AddDescription "La plan<61>te Mars" images/mars.jpg
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<h2>Index alternatifs</h2>
|
|
|
|
|
|
|
|
|
|
<p>Pour une raison quelconque, vous n'utilisez pas de fichiers
|
|
|
|
|
index.html ou index.htm. Par exemple, vous utilisez PHP et pour vous,
|
|
|
|
|
les fichiers d'index s'appellent <code>index.php</code>. Ou encore,
|
|
|
|
|
vos fichiers d'index s'appellent <code>tagada.html</code>. Vous pouvez
|
|
|
|
|
indiquer au serveur quels fichiers consid<69>rer comme des fichiers
|
|
|
|
|
d'index :</p>
|
|
|
|
|
|
|
|
|
|
<pre>DirectoryIndex index.php</pre>
|
|
|
|
|
|
|
|
|
|
<p>Si vous utilisez des fichiers d'index aux noms diff<66>rents, vous
|
|
|
|
|
pouvez cr<63>er une liste. Apache regarde d'abord si le fichier cit<69> en
|
|
|
|
|
premier existe, et <20> d<>faut passe au suivant jusqu'<27> ce qu'il en
|
|
|
|
|
trouve un, sinon il affiche le contenu du r<>pertoire (sauf si vous
|
|
|
|
|
avez d<>sactiv<69> cette fonction, bien s<>r).</p>
|
|
|
|
|
|
|
|
|
|
<pre>DirectoryIndex index.php tagada.html main.html index.html</pre>
|
|
|
|
|
|
|
|
|
|
<h2>Restrictions d'acc<63>s</h2>
|
|
|
|
|
|
|
|
|
|
<p>Vous pouvez interdire l'acc<63>s <20> votre site <20> partir de certaines
|
|
|
|
|
adresses IP. Rappel : une adresse IP est constitu<74> de quatre
|
|
|
|
|
nombres de 0 <20> 255 s<>par<61>s par des points, par exemple l'adresse IP de
|
|
|
|
|
clipper est <code>129.199.121.1</code>.</p>
|
|
|
|
|
|
|
|
|
|
<p>Pour interdire une adresse IP :</p>
|
|
|
|
|
|
|
|
|
|
<pre>deny from 123.456.789.10</pre>
|
|
|
|
|
|
|
|
|
|
<p>Inversement, on peut autoriser une adresse IP :</p>
|
|
|
|
|
|
|
|
|
|
<pre>allow from123.456.789.10</pre>
|
|
|
|
|
|
|
|
|
|
<p>Si on indique un ou deux nombres seulement, ils sont interpr<70>t<EFBFBD>s
|
|
|
|
|
comme des plages d'adresses IP. Par exemple, <code>allow from
|
|
|
|
|
129.199</code> autorise tous les acc<63>s venant de l'<27>cole. <code>deny
|
|
|
|
|
from all</code> interdit <20> tout le monde l'acc<63>s <20> vos fichiers, mais
|
|
|
|
|
des scripts peuvent continuer <20> les utiliser.</p>
|
|
|
|
|
|
|
|
|
|
<p>En pratique, une interdiction de certaines IP prend la forme
|
|
|
|
|
suivante :</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
order allow,deny
|
|
|
|
|
deny from 123.45.6.7 # on interdit l'adresse pr<70>cise 123.45.6.7
|
|
|
|
|
deny from 12.34.5 # on interdit toutes les adresses IP commen<65>ant par 12.34.5
|
|
|
|
|
allow from all # on autorise tous les autres
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>Exemple : vous souhaitez r<>server une partie de votre site aux
|
|
|
|
|
connexions venant de l'<27>cole. Admettons qu'il s'agisse de votre
|
|
|
|
|
r<EFBFBD>pertoire <code>~/www/normalos/</code>. Cr<43>ez dans ce r<>pertoire une
|
|
|
|
|
fichier <code>.htaccess</code> dans lequel vous <20>crirez :</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
order deny,allow
|
|
|
|
|
deny from all
|
|
|
|
|
allow from 129.199
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>On peut aussi utiliser des noms de domaine. Admettons que vous
|
|
|
|
|
n'aimiez ni le gouvernenent am<61>ricain ni l'entreprise de
|
|
|
|
|
M. Gates. Vous pouvez <20>crire :</p>
|
|
|
|
|
|
|
|
|
|
<pre>Deny from .gov microsoft.com</pre>
|
|
|
|
|
|
|
|
|
|
<h2>Authentification par mot de passe</h2>
|
|
|
|
|
|
|
|
|
|
<p>JavaScript vous permet <20>galement ce genre d'identification, mais il
|
|
|
|
|
vaut mieux passer par .htaccess : il est p<>rilleux de confier la
|
|
|
|
|
s<EFBFBD>curit<EFBFBD> au navigateur de l'internaute, qui en fait ce qu'il
|
|
|
|
|
veut. Vous n'avez pas ce genre de probl<62>me c<>t<EFBFBD> serveur.</p>
|
|
|
|
|
|
|
|
|
|
<p>Gardez cependant <20> l'esprit que la protection par mot de
|
|
|
|
|
passe au niveau du serveur va faire passer le mot de passe en clair
|
|
|
|
|
(non crypt<70>). Si vous prot<6F>gez par mot de passe un r<>pertoire, il est
|
|
|
|
|
possible de passer outre votre protection si l'on a connaissance de
|
|
|
|
|
sous-r<>pertoires non prot<6F>g<EFBFBD>s.</p>
|
|
|
|
|
|
|
|
|
|
<p>Proc<6F>dons par <20>tapes.</p>
|
|
|
|
|
|
|
|
|
|
<p>1) On commence par cr<63>er un fichier <code>.passwds</code> qui
|
|
|
|
|
contiendra les renseignements sur les personnes autoris<69>es. Pour ce
|
|
|
|
|
faire, on tape :</p>
|
|
|
|
|
|
|
|
|
|
<pre>htpasswd -c .passwds toto</pre>
|
|
|
|
|
|
|
|
|
|
<p>Ce qui cr<63>e <20> la fois <code>.htpasswd</code> et l'utilisateur toto,
|
|
|
|
|
pour lequel on vous demande un mot de passe.</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">clipper ~ $</span> htpasswd -c .passwds
|
|
|
|
|
toto
|
|
|
|
|
New password:
|
|
|
|
|
Re-type new password:
|
|
|
|
|
Adding password for user toto
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>Pour ajouter d'autres utilisateurs : <code>htpasswd .htpasswd
|
|
|
|
|
titi</code>. Pour en retirer, il suffit d'<27>diter le fichier et
|
|
|
|
|
d'effacer la ligne correspondant <20> l'utilisateur
|
|
|
|
|
concern<EFBFBD>. <code>htpasswd</code> chiffre les mots de passe (en
|
|
|
|
|
utilisant une variante de md5), qui ne figurent donc pas en clair dans
|
|
|
|
|
les fichiers.</p>
|
|
|
|
|
|
|
|
|
|
<p>Pour en savoir plus, consultez la <a
|
|
|
|
|
href="http://httpd.apache.org/docs/programs/htpasswd.html">page de
|
|
|
|
|
man</a> de htpasswd.</p>
|
|
|
|
|
|
|
|
|
|
<p>2) On en revient <20> <code>.htaccess</code> et on tape :</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
AuthType Basic
|
|
|
|
|
AuthUserFile ~/www/repertoire/.passwds # endroit o<> vous conservez les mots de passe
|
2003-04-29 17:02:10 +02:00
|
|
|
|
AuthName "Entrez votre mot de passe" # ici vous indiquez ce qui figurera dans la barre de titre
|
|
|
|
|
# de la fen<65>tre
|
2002-12-10 00:10:50 +01:00
|
|
|
|
require valid-user
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>Si vous voulez prot<6F>ger par mot de passe seulement certaines
|
|
|
|
|
parties du site, il faut cr<63>er un <code>.htaccess</code> dans le
|
|
|
|
|
r<EFBFBD>pertoire concern<72>.</p>
|
|
|
|
|
|
|
|
|
|
<p>Vous ne voulez peut-<2D>tre pas que l'on sache o<> vous rangez vos mots
|
|
|
|
|
de passe. Il faut dans ce cas emp<6D>cher l'acc<63>s au fichier
|
|
|
|
|
<code>.htaccess</code> lui-m<>me. Pour prot<6F>ger le fichier,
|
|
|
|
|
taper :</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<Files .htaccess>
|
|
|
|
|
order allow,deny
|
|
|
|
|
deny from all
|
|
|
|
|
</Files>
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>Pour des raisons similaires, il vaut mieux ranger .passwds dans des
|
|
|
|
|
r<EFBFBD>pertoires non publics (cf. la doc sur les <a
|
|
|
|
|
href="&url.tuteurs;unix/droits.html">droits d'acc<63>s</a>).</p>
|
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
2003-07-07 18:24:31 +02:00
|
|
|
|
Auteur : Marie-Lan Nguyen. Derni<6E>re modification le
|
|
|
|
|
<date value="$Date: 2003-07-07 16:24:31 $" />.
|
2002-12-10 00:10:50 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
|