1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- French translation : Lucien GENTIS -->
5 <!-- Reviewed by : Vincent Deffontaines -->
6 <!-- English Revision: 567425 -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <manualpage metafile="urlmapping.xml.meta">
27 <title> Mise en correspondance des URLs avec le système de fichiers</title>
30 <p>Ce document explique comment Apache utilise l'URL contenue dans une
31 requête pour déterminer le noeud du système de fichier à partir duquel le
32 fichier devra être servi.</p>
35 <section id="related"><title>Modules et directives concernés</title>
39 <module>mod_alias</module>
40 <module>mod_proxy</module>
41 <module>mod_rewrite</module>
42 <module>mod_userdir</module>
43 <module>mod_speling</module>
44 <module>mod_vhost_alias</module>
47 <directive module="mod_alias">Alias</directive>
48 <directive module="mod_alias">AliasMatch</directive>
49 <directive module="mod_speling">CheckSpelling</directive>
50 <directive module="core">DocumentRoot</directive>
51 <directive module="core">ErrorDocument</directive>
52 <directive module="core">Options</directive>
53 <directive module="mod_proxy">ProxyPass</directive>
54 <directive module="mod_proxy">ProxyPassReverse</directive>
55 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
56 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
57 <directive module="mod_alias">Redirect</directive>
58 <directive module="mod_alias">RedirectMatch</directive>
59 <directive module="mod_rewrite">RewriteCond</directive>
60 <directive module="mod_rewrite">RewriteMatch</directive>
61 <directive module="mod_alias">ScriptAlias</directive>
62 <directive module="mod_alias">ScriptAliasMatch</directive>
63 <directive module="mod_userdir">UserDir</directive>
68 <section id="documentroot"><title>Racine des documents (DocumentRoot)</title>
70 <p>La méthode par défaut d'Apache pour déterminer quel fichier servir pour
71 une requête donnée, consiste à extraire le chemin du fichier de la requête
72 (la partie de l'URL qui suit le nom d'hôte et le port), puis de l'ajouter
73 à la fin de la valeur de la directive
74 <directive module="core">DocumentRoot</directive> définie dans vos fichiers
76 Ainsi, les fichiers et répertoires
77 situés en dessous de <directive module="core">DocumentRoot</directive>
78 constituent l'arborescence de base des documents qui seront visibles
81 <p>Par exemple, si la directive
82 <directive module="core">DocumentRoot</directive> contient
83 <code>/var/www/html</code>, une requête pour
84 <code>http://www.example.com/fish/guppies.html</code> retournera le
85 fichier <code>/var/www/html/fish/guppies.html</code> au client.</p>
87 <p>Apache supporte aussi les <a href="vhosts/">Hôtes virtuels</a>,
88 ce qui lui permet de traiter des requêtes pour plusieurs hôtes.
89 Dans ce cas, un <directive module="core">DocumentRoot</directive>
90 différent peut être défini pour chaque hôte virtuel;
91 les directives fournies par le module
92 <module>mod_vhost_alias</module> peuvent aussi être utilisées afin de
93 déterminer dynamiquement le noeud approprié du système de fichiers
94 à partir duquel servir un contenu en fonction de l'adresse IP
95 ou du nom d'hôte.</p>
97 <p>La directive <directive module="core">DocumentRoot</directive> est
98 définie dans le fichier de configuration de votre serveur principal
99 (<code>httpd.conf</code>), mais peut aussi être redéfinie pour chaque
100 <a href="vhosts/">Hôte virtuel</a> supplémentaire que vous avez créé.</p>
103 <section id="outside"><title>Fichiers situés en dehors de
104 l'arborescence DocumentRoot</title>
106 <p>Il existe de nombreuses circonstances pour lesquelles il est nécessaire
107 d'autoriser l'accès web à des portions du système de fichiers qui ne se
108 trouvent pas dans l'arborescence <directive
109 module="core">DocumentRoot</directive>. Apache propose de nombreuses
110 solutions pour réaliser cela. Sur les systèmes Unix, les liens
111 symboliques permettent de rattacher d'autres portions du système de
112 fichiers au <directive
113 module="core">DocumentRoot</directive>. Pour des raisons de sécurité,
114 Apache ne suivra les liens symboliques que si les <directive
115 module="core">Options</directive> pour le répertoire concerné contiennent
116 <code>FollowSymLinks</code> ou <code>SymLinksIfOwnerMatch</code>.</p>
118 <p>Une autre méthode consiste à utiliser la directive <directive
119 module="mod_alias">Alias</directive> pour rattacher toute portion
120 du système de fichiers à l'arborescence du site web. Par exemple, avec</p>
122 <example>Alias /docs /var/web</example>
124 <p>l'URL <code>http://www.example.com/docs/dir/file.html</code>
125 correspondra au fichier <code>/var/web/dir/file.html</code>. La
127 <directive module="mod_alias">ScriptAlias</directive>
128 fonctionne de la même manière, excepté que tout contenu localisé dans le
129 chemin cible sera traité comme un script <glossary ref="cgi"
132 <p>Pour les situations qui nécessitent plus de flexibilité, vous disposez
133 des directives <directive module="mod_alias">AliasMatch</directive>
134 et <directive module="mod_alias">ScriptAliasMatch</directive>
135 qui permettent des substitutions et comparaisons puissantes basées
136 sur les <glossary ref="regex">expressions rationnelles</glossary>.
139 <example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
140 /home/$1/cgi-bin/$2</example>
142 <p>fera correspondre une requête du style
143 <code>http://example.com/~user/cgi-bin/script.cgi</code> au chemin
144 <code>/home/user/cgi-bin/script.cgi</code>, et traitera le fichier résultant
145 comme un script CGI.</p>
148 <section id="user"><title>Répertoires des utilisateurs</title>
150 <p>Sur les systèmes Unix, on peut traditionnellement faire référence
151 au répertoire personnel d'un <em>utilisateur</em> particulier à l'aide de
152 l'expression <code>~user/</code>.
153 Le module <module>mod_userdir</module>
154 étend cette idée au web en autorisant l'accès aux fichiers situés dans les
155 répertoires home des utilisateurs à l'aide d'URLs
156 comme dans ce qui suit :</p>
158 <example>http://www.example.com/~user/file.html</example>
160 <p>Pour des raisons de sécurité, il est déconseillé de permettre un accès
161 direct à un répertoire home d'utilisateur depuis le web. A cet effet, la
162 directive <directive module="mod_userdir">UserDir</directive>
163 spécifie un répertoire où sont situés les fichiers accessibles depuis le web
164 dans le répertoire home de l'utilisateur.
165 Avec la configuration par défaut
166 <code>Userdir public_html</code>, l'URL ci-dessus correspondra à un fichier
167 dont le chemin sera du style
168 <code>/home/user/public_html/file.html</code> où
169 <code>/home/user/</code> est le répertoire home de l'utilisateur tel qu'il
170 est défini dans <code>/etc/passwd</code>.</p>
172 <p>La directive <code>Userdir</code> met à votre disposition de nombreuses
173 formes différentes pour les systèmes où <code>/etc/passwd</code> ne
174 spécifie pas la localisation du répertoire home.</p>
176 <p>Certains jugent le symbole "~" (dont le code sur le web est souvent
177 <code>%7e</code>) inapproprié et préfèrent utiliser une chaîne de
178 caractères différente pour représenter les répertoires utilisateurs.
179 mod_userdir ne supporte pas cette fonctionnalité. Cependant, si les
180 répertoires home des utilisateurs sont structurés de manière rationnelle,
181 il est possible d'utiliser la directive
182 <directive module="mod_alias">AliasMatch</directive>
183 pour obtenir l'effet désiré. Par exemple, pour faire correspondre
184 <code>http://www.example.com/upages/user/file.html</code> à
185 <code>/home/user/public_html/file.html</code>, utilisez la directive
186 <code>AliasMatch</code> suivante :</p>
188 <example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
189 /home/$1/public_html/$2</example>
192 <section id="redirect"><title>Redirection d'URL</title>
194 <p>Les directives de configuration décrites dans les sections précédentes
195 demandent à Apache d'extraire un contenu depuis un emplacement spécifique
196 du système de fichiers
197 et de la retourner au client. Il est cependant parfois
198 souhaitable d'informer le
199 client que le contenu demandé est localisé à une URL différente, et de
200 demander au client d'élaborer une nouvelle requête avec la nouvelle URL.
201 Ce processus se nomme <em>redirection</em> et est implémenté par la
202 directive <directive module="mod_alias">Redirect</directive>.
203 Par exemple, si le contenu du répertoire <code>/foo/</code> sous
204 <directive module="core">DocumentRoot</directive> est déplacé vers le
205 nouveau répertoire <code>/bar/</code>, vous pouvez demander aux clients
206 de le requérir à sa nouvelle localisation comme suit :</p>
208 <example>Redirect permanent /foo/ http://www.example.com/bar/</example>
210 <p>Ceci aura pour effet de rediriger tout chemin d'URL commençant par
211 <code>/foo/</code> vers le même chemin d'URL sur le serveur
212 <code>www.example.com</code> en remplaçant <code>/foo/</code> par
213 <code>/bar/</code>. Vous pouvez rediriger les clients non seulement sur le
214 serveur d'origine, mais aussi vers n'importe quel autre serveur.</p>
216 <p>Apache propose aussi la directive <directive
217 module="mod_alias">RedirectMatch</directive> pour traiter les problèmes
218 de réécriture d'une plus grande complexité. Par exemple, afin de rediriger
219 les requêtes pour la page d'accueil du site vers un site différent, mais
220 laisser toutes les autres requêtes inchangées, utilisez la
221 configuration suivante :</p>
223 <example>RedirectMatch permanent ^/$
224 http://www.example.com/startpage.html</example>
226 <p>De même, pour rediriger temporairement toutes les pages d'un site
227 vers une page particulière d'un autre site, utilisez ce qui suit :</p>
229 <example>RedirectMatch temp .*
230 http://othersite.example.com/startpage.html</example>
233 <section id="proxy"><title>Mandataire inverse (Reverse Proxy)</title>
235 <p>Apache vous permet aussi de rapatrier des documents distants
236 dans l'espace des URL du serveur local.
237 Cette technique est appelée <em>mandataire inverse ou reverse
238 proxying</em> car le serveur web agit comme un serveur mandataire en
239 rapatriant les documents depuis un serveur distant puis les renvoyant
240 au client. Ceci diffère d'un service de proxy usuel car, pour le client,
241 les documents semblent appartenir au serveur mandataire inverse.</p>
243 <p>Dans l'exemple suivant, quand les clients demandent des documents situés
244 dans le répertoire
245 <code>/foo/</code>, le serveur rapatrie ces documents depuis le répertoire
246 <code>/bar/</code> sur <code>internal.example.com</code>
247 et les renvoie au client comme s'ils appartenaient au serveur local.</p>
250 ProxyPass /foo/ http://internal.example.com/bar/<br />
251 ProxyPassReverse /foo/ http://internal.example.com/bar/
252 ProxyPassReverseCookieDomain internal.example.com public.example.com
253 ProxyPassReverseCookiePath /foo/ /bar/
256 <p>La directive <directive module="mod_proxy">ProxyPass</directive> configure
257 le serveur pour rapatrier les documents appropriés, alors que la directive
258 <directive module="mod_proxy">ProxyPassReverse</directive>
259 réécrit les redirections provenant de
260 <code>internal.example.com</code> de telle manière qu'elles ciblent le
261 répertoire approprié sur le serveur local. De manière similaire, les directives
262 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
263 et <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
264 réécrivent les cookies élaborés par le serveur d'arrière-plan.</p>
265 <p>Il est important de noter cependant, que les liens situés dans les documents
266 ne seront pas réécrits. Ainsi, tout lien absolu sur
267 <code>internal.example.com</code> fera décrocher le client
268 du serveur mandataire et effectuer sa requête directement sur
269 <code>internal.example.com</code>. Un module tiers
270 <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
271 permet de réécrire les liens dans les documents HTML et XHTML.</p>
274 <section id="rewrite"><title>Moteur de réécriture</title>
276 <p>Le moteur de réécriture <module>mod_rewrite</module> peut s'avérer
277 utile lorsqu'une substitution plus puissante est nécessaire.
278 Les directives fournies par ce module utilisent des caractéristiques de la
279 requête comme le type de navigateur ou l'adresse IP source afin de décider
280 depuis où servir le contenu. En outre, mod_rewrite peut utiliser des
281 fichiers ou programmes de bases de données externes pour déterminer comment
282 traiter une requête. Le moteur de réécriture peut effectuer les trois types
283 de mise en correspondance discutés plus haut :
284 redirections internes (aliases), redirections externes, et services mandataires.
285 De nombreux exemples pratiques utilisant mod_rewrite sont discutés dans le
286 <a href="misc/rewriteguide.html">Guide de réécriture des URLs</a>.</p>
289 <section id="notfound"><title>Fichier non trouvé (File Not Found)</title>
291 <p>Inévitablement, apparaîtront des URLs qui ne correspondront à aucun
292 fichier du système de fichiers.
293 Ceci peut arriver pour de nombreuses raisons.
294 Il peut s'agir du déplacement de documents d'une
295 localisation vers une autre. Dans ce cas, le mieux est d'utiliser la
296 <a href="#redirect">redirection d'URL</a> pour informer les clients de la
297 nouvelle localisation de la ressource. De cette façon, vous êtes sur que
298 les anciens signets et liens continueront de fonctionner, même si la
299 ressource est déplacée.</p>
301 <p>Une autre cause fréquente d'erreurs "File Not Found" est l'erreur de
302 frappe accidentelle dans les URLs, soit directement dans le navigateur,
303 soit dans les liens HTML. Apache propose le module
304 <module>mod_speling</module> (sic) pour tenter de résoudre ce problème.
305 Lorsque ce module est activé, il intercepte les erreurs
306 "File Not Found" et recherche une ressource possédant un nom de fichier
307 similaire. Si un tel fichier est trouvé, mod_speling va envoyer une
308 redirection HTTP au client pour lui communiquer l'URL correcte.
309 Si plusieurs fichiers proches sont trouvés, une liste des alternatives
310 possibles sera présentée au client.</p>
312 <p>mod_speling possède une fonctionnalité particulièrement utile :
313 il compare les noms de fichiers sans tenir compte de la casse.
314 Ceci peut aider les systèmes où les utilisateurs ne connaissent pas la
315 sensibilité des URLs à la casse et bien sûr les systèmes de fichiers unix.
316 Mais l'utilisation de mod_speling pour toute autre chose que la correction
317 occasionnelle d'URLs peut augmenter la charge du serveur, car chaque
318 requête "incorrecte" entraîne une redirection d'URL et une nouvelle requête
319 de la part du client.</p>
321 <p>Si toutes les tentatives pour localiser le contenu échouent, Apache
322 retourne une page d'erreur avec le code de statut HTTP 404
323 (file not found). L'apparence de cette page est contrôlée à l'aide de la
324 directive <directive module="core">ErrorDocument</directive>
325 et peut être personnalisée de manière très flexible comme discuté dans le
327 <a href="custom-error.html">Réponses personnalisées aux erreurs</a>.</p>