769f7bf28f
- RedirectMatch ne sert à rien sans regexp, - Redirect* prend en général une URL entière comme dernier argument. J'en ai profité aussi pour signaler la redirection possible de tout un répertoire, ainsi que la redirection vers un site externe.
285 lines
10 KiB
XML
285 lines
10 KiB
XML
<?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ère décentralisée un serveur Apache (le serveur des
|
|
élèves, par exemple). Par exemple, <code>.htaccess</code> vous permet
|
|
de protéger certains répertoires avec des mots de passe, de
|
|
restreindre l'accès à votre page Web, d'empêcher le listage de vos
|
|
répertoires (quand ils ne contiennent pas de fichier index.html), ou
|
|
encore d'utiliser vos propres pages d'erreur (404, 403)...</p>
|
|
|
|
<div class="attention">Les exemples donnés ici marchent pour le
|
|
serveur Apache du serveur des élèves de l'ENS. Il ne marchera
|
|
peut-être pas avec une autre configuration d'Apache. En cas de doute,
|
|
demandez à votre administrateur système.</div>
|
|
|
|
<p>Les directives d'un <code>.htaccess</code> s'appliquent à
|
|
l'ensemble des fichiers du répertoire dans lequel il est placé, ainsi
|
|
qu'aux sous-repertoires. <code>.htaccess</code> est lu à chaque
|
|
requête du serveur, donc chaque modification prend effet
|
|
immédiatement.</p>
|
|
|
|
<div class="attention">Attention, la moindre erreur dans votre
|
|
<code>.htaccess</code> causera une erreur serveur et empêchera tout
|
|
accès à votre site. Vérifiez donc bien que tout marche bien à chaque
|
|
modification de ce fichier. Une consultation des logs de webmaster
|
|
(<code>/opt/webmaster/var/log/error_log.curr</code>) vous aidera à
|
|
diagnostiquer ce qui ne marche pas.</div>
|
|
|
|
<p>Précisons enfin que chaque ligne commençant par un dièse (#) est
|
|
ignorée, ce qui vous permet de commenter vos directives.</p>
|
|
|
|
<h2><a name="err">Personnalisez vos pages d'erreur</a></h2>
|
|
|
|
<p>Tout le monde connaît bien les pages d'erreur 404 (File Not Found),
|
|
403 (Forbidden), 500 (Internal Server Error)... Il peut être utile de
|
|
personnaliser ce type de pages d'erreur (surtout les erreurs 404), par
|
|
exemple pour demander à l'internaute de vous signaler les liens
|
|
cassé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 élèves).</p>
|
|
|
|
<p>D'abord, créez vos propres pages d'erreur. Ensuite, dans votre
|
|
fichier <code>.htaccess</code>, é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><a name="redir">Redirections</a></h2>
|
|
|
|
<p>Les redirections sont particulièrement utiles quand vous modifiez
|
|
l'architecture de votre page Web. Par exemple, vous avez décidé de
|
|
ranger tous vos exposés dans un répertoire
|
|
<code>~/www/exposes/</code>. Vous souhaitez que quelqu'un qui veut
|
|
accéder à l'ancien <code>~/www/expose1.html</code> soit rerouté vers
|
|
la nouvelle adresse, <code>~/www/exposes/1.html</code>.</p>
|
|
|
|
<p>Ceci est à spécifier dans votre <code>.htaccess</code> :</p>
|
|
|
|
<pre>RedirectPermanent /home/toto/expose1.html http://www.eleves.ens.fr/home/toto/exposes/1.html</pre>
|
|
|
|
<p>Et ainsi de suite pour tous les fichiers concernés.</p>
|
|
|
|
<p>Vous pouvez aussi de cette manière rediriger les requètes vers un
|
|
répertoire entier, et les rediriger vers un site à l'extérieur de
|
|
l'ENS :</p>
|
|
|
|
<pre>RedirectPermanent /home/toto/chevaux/ http://www.toto-chevaux.net/</pre>
|
|
|
|
<p>De cette façon, les requètes vers vos anciennes pages dans le répertoire
|
|
<code>~/www/chevaux/</code> seront toutes redirigées vers le site
|
|
<code>http://www.toto-chevaux.net/</code>. Par exemple,
|
|
<code>~/www/chevaux/soins.html</code> sera redirigée vers
|
|
<code>http://www.toto-chevaux.net/soins.html</code>.</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écifier d'autres informations, comme la date de derniè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ô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ère modification</dd>
|
|
</dl>
|
|
|
|
<p>Exemple : vous avez un répertoire d'images appelé
|
|
<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è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è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érer comme des fichiers
|
|
d'index :</p>
|
|
|
|
<pre>DirectoryIndex index.php</pre>
|
|
|
|
<p>Si vous utilisez des fichiers d'index aux noms différents, vous
|
|
pouvez créer une liste. Apache regarde d'abord si le fichier cité en
|
|
premier existe, et à défaut passe au suivant jusqu'à ce qu'il en
|
|
trouve un, sinon il affiche le contenu du répertoire (sauf si vous
|
|
avez désactivé cette fonction, bien sûr).</p>
|
|
|
|
<pre>DirectoryIndex index.php tagada.html main.html index.html</pre>
|
|
|
|
<h2>Restrictions d'accès</h2>
|
|
|
|
<p>Vous pouvez interdire l'accès à votre site à partir de certaines
|
|
adresses IP. Rappel : une adresse IP est constitué de quatre
|
|
nombres de 0 à 255 séparé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étés
|
|
comme des plages d'adresses IP. Par exemple, <code>allow from
|
|
129.199</code> autorise tous les accès venant de l'École. <code>deny
|
|
from all</code> interdit à tout le monde l'accès à vos fichiers, mais
|
|
des scripts peuvent continuer à 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écise 123.45.6.7
|
|
deny from 12.34.5 # on interdit toutes les adresses IP commenç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'École. Admettons qu'il s'agisse de votre
|
|
répertoire <code>~/www/normalos/</code>. Créez dans ce répertoire une
|
|
fichier <code>.htaccess</code> dans lequel vous é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éricain ni l'entreprise de
|
|
M. Gates. Vous pouvez écrire :</p>
|
|
|
|
<pre>Deny from .gov microsoft.com</pre>
|
|
|
|
<h2>Authentification par mot de passe</h2>
|
|
|
|
<p>JavaScript vous permet également ce genre d'identification, mais il
|
|
vaut mieux passer par .htaccess : il est périlleux de confier la
|
|
sécurité au navigateur de l'internaute, qui en fait ce qu'il
|
|
veut. Vous n'avez pas ce genre de problème côté serveur.</p>
|
|
|
|
<p>Gardez cependant à l'esprit que la protection par mot de
|
|
passe au niveau du serveur va faire passer le mot de passe en clair
|
|
(non crypté). Si vous proté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égés.</p>
|
|
|
|
<p>Procédons par étapes.</p>
|
|
|
|
<p>1) On commence par créer un fichier <code>.passwds</code> qui
|
|
contiendra les renseignements sur les personnes autorisées. Pour ce
|
|
faire, on tape :</p>
|
|
|
|
<pre>htpasswd -c .passwds toto</pre>
|
|
|
|
<p>Ce qui crée à 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'éditer le fichier et
|
|
d'effacer la ligne correspondant à l'utilisateur
|
|
concerné. <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 à <code>.htaccess</code> et on tape :</p>
|
|
|
|
<pre>
|
|
AuthType Basic
|
|
AuthUserFile /users/03/pataphys/vian/www/repertoire/.passwds
|
|
# endroit où vous conservez les mots de passe
|
|
AuthName "Entrez votre mot de passe" # ici vous indiquez ce qui figurera dans la barre de titre
|
|
# de la fenêtre
|
|
require valid-user
|
|
</pre>
|
|
|
|
<p>Si vous voulez protéger par mot de passe seulement certaines
|
|
parties du site, il faut créer un <code>.htaccess</code> dans le
|
|
répertoire concerné.</p>
|
|
|
|
<p>Vous ne voulez peut-être pas que l'on sache où vous rangez vos mots
|
|
de passe. Il faut dans ce cas empêcher l'accès au fichier
|
|
<code>.htaccess</code> lui-même. Pour protéger le fichier,
|
|
taper :</p>
|
|
|
|
<pre>
|
|
<Files .htaccess>
|
|
order allow,deny
|
|
deny from all
|
|
</Files>
|
|
</pre>
|
|
|
|
<div class="metainformation">
|
|
Auteur : Marie-Lan Nguyen. Modifié par : Laurent Rineau.
|
|
Dernière modification le <date value="$Date: 2004-03-08 12:03:39 $" />.
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|
|
|