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: 1041851 -->
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 le serveur HTTP 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_actions</module>
40 <module>mod_alias</module>
41 <module>mod_dir</module>
42 <module>mod_imagemap</module>
43 <module>mod_negotiation</module>
44 <module>mod_proxy</module>
45 <module>mod_rewrite</module>
46 <module>mod_speling</module>
47 <module>mod_userdir</module>
48 <module>mod_vhost_alias</module>
51 <directive module="mod_alias">Alias</directive>
52 <directive module="mod_alias">AliasMatch</directive>
53 <directive module="mod_speling">CheckSpelling</directive>
54 <directive module="core">DocumentRoot</directive>
55 <directive module="core">ErrorDocument</directive>
56 <directive module="core">Options</directive>
57 <directive module="mod_proxy">ProxyPass</directive>
58 <directive module="mod_proxy">ProxyPassReverse</directive>
59 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
60 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
61 <directive module="mod_alias">Redirect</directive>
62 <directive module="mod_alias">RedirectMatch</directive>
63 <directive module="mod_rewrite">RewriteCond</directive>
64 <directive module="mod_rewrite">RewriteRule</directive>
65 <directive module="mod_alias">ScriptAlias</directive>
66 <directive module="mod_alias">ScriptAliasMatch</directive>
67 <directive module="mod_userdir">UserDir</directive>
72 <section id="documentroot"><title>Racine des documents (DocumentRoot)</title>
74 <p>La méthode par défaut de httpd pour déterminer quel fichier servir pour
75 une requête donnée, consiste à extraire le chemin du fichier de la requête
76 (la partie de l'URL qui suit le nom d'hôte et le port), puis de l'ajouter
77 à la fin de la valeur de la directive
78 <directive module="core">DocumentRoot</directive> définie dans vos fichiers
80 Ainsi, les fichiers et répertoires
81 situés en dessous de <directive module="core">DocumentRoot</directive>
82 constituent l'arborescence de base des documents qui seront visibles
85 <p>Par exemple, si la directive
86 <directive module="core">DocumentRoot</directive> contient
87 <code>/var/www/html</code>, une requête pour
88 <code>http://www.example.com/fish/guppies.html</code> retournera le
89 fichier <code>/var/www/html/fish/guppies.html</code> au client.</p>
91 <p>httpd supporte aussi les <a href="vhosts/">Hôtes virtuels</a>,
92 ce qui lui permet de traiter des requêtes pour plusieurs hôtes.
93 Dans ce cas, un <directive module="core">DocumentRoot</directive>
94 différent peut être défini pour chaque hôte virtuel;
95 les directives fournies par le module
96 <module>mod_vhost_alias</module> peuvent aussi être utilisées afin de
97 déterminer dynamiquement le noeud approprié du système de fichiers
98 à partir duquel servir un contenu en fonction de l'adresse IP
99 ou du nom d'hôte.</p>
101 <p>La directive <directive module="core">DocumentRoot</directive> est
102 définie dans le fichier de configuration de votre serveur principal
103 (<code>httpd.conf</code>), mais peut aussi être redéfinie pour chaque
104 <a href="vhosts/">Hôte virtuel</a> supplémentaire que vous avez créé.</p>
107 <section id="outside"><title>Fichiers situés en dehors de
108 l'arborescence DocumentRoot</title>
110 <p>Il existe de nombreuses circonstances pour lesquelles il est nécessaire
111 d'autoriser l'accès web à des portions du système de fichiers qui ne se
112 trouvent pas dans l'arborescence <directive
113 module="core">DocumentRoot</directive>. httpd propose de nombreuses
114 solutions pour réaliser cela. Sur les systèmes Unix, les liens
115 symboliques permettent de rattacher d'autres portions du système de
116 fichiers au <directive
117 module="core">DocumentRoot</directive>. Pour des raisons de sécurité,
118 httpd ne suivra les liens symboliques que si les <directive
119 module="core">Options</directive> pour le répertoire concerné contiennent
120 <code>FollowSymLinks</code> ou <code>SymLinksIfOwnerMatch</code>.</p>
122 <p>Une autre méthode consiste à utiliser la directive <directive
123 module="mod_alias">Alias</directive> pour rattacher toute portion
124 du système de fichiers à l'arborescence du site web. Par exemple, avec</p>
126 <example>Alias /docs /var/web</example>
128 <p>l'URL <code>http://www.example.com/docs/dir/file.html</code>
129 correspondra au fichier <code>/var/web/dir/file.html</code>. La
131 <directive module="mod_alias">ScriptAlias</directive>
132 fonctionne de la même manière, excepté que tout contenu localisé dans le
133 chemin cible sera traité comme un script <glossary ref="cgi"
136 <p>Pour les situations qui nécessitent plus de flexibilité, vous disposez
137 des directives <directive module="mod_alias">AliasMatch</directive>
138 et <directive module="mod_alias">ScriptAliasMatch</directive>
139 qui permettent des substitutions et comparaisons puissantes basées
140 sur les <glossary ref="regex">expressions rationnelles</glossary>.
143 <example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
144 /home/$1/cgi-bin/$2</example>
146 <p>fera correspondre une requête du style
147 <code>http://example.com/~user/cgi-bin/script.cgi</code> au chemin
148 <code>/home/user/cgi-bin/script.cgi</code>, et traitera le fichier résultant
149 comme un script CGI.</p>
152 <section id="user"><title>Répertoires des utilisateurs</title>
154 <p>Sur les systèmes Unix, on peut traditionnellement faire référence
155 au répertoire personnel d'un <em>utilisateur</em> particulier à l'aide de
156 l'expression <code>~user/</code>.
157 Le module <module>mod_userdir</module>
158 étend cette idée au web en autorisant l'accès aux fichiers situés dans les
159 répertoires home des utilisateurs à l'aide d'URLs
160 comme dans ce qui suit :</p>
162 <example>http://www.example.com/~user/file.html</example>
164 <p>Pour des raisons de sécurité, il est déconseillé de permettre un accès
165 direct à un répertoire home d'utilisateur depuis le web. A cet effet, la
166 directive <directive module="mod_userdir">UserDir</directive>
167 spécifie un répertoire où sont situés les fichiers accessibles depuis le web
168 dans le répertoire home de l'utilisateur.
169 Avec la configuration par défaut
170 <code>Userdir public_html</code>, l'URL ci-dessus correspondra à un fichier
171 dont le chemin sera du style
172 <code>/home/user/public_html/file.html</code> où
173 <code>/home/user/</code> est le répertoire home de l'utilisateur tel qu'il
174 est défini dans <code>/etc/passwd</code>.</p>
176 <p>La directive <code>Userdir</code> met à votre disposition de nombreuses
177 formes différentes pour les systèmes où <code>/etc/passwd</code> ne
178 spécifie pas la localisation du répertoire home.</p>
180 <p>Certains jugent le symbole "~" (dont le code sur le web est souvent
181 <code>%7e</code>) inapproprié et préfèrent utiliser une chaîne de
182 caractères différente pour représenter les répertoires utilisateurs.
183 mod_userdir ne supporte pas cette fonctionnalité. Cependant, si les
184 répertoires home des utilisateurs sont structurés de manière rationnelle,
185 il est possible d'utiliser la directive
186 <directive module="mod_alias">AliasMatch</directive>
187 pour obtenir l'effet désiré. Par exemple, pour faire correspondre
188 <code>http://www.example.com/upages/user/file.html</code> à
189 <code>/home/user/public_html/file.html</code>, utilisez la directive
190 <code>AliasMatch</code> suivante :</p>
192 <example>AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$
193 /home/$1/public_html/$3</example>
196 <section id="redirect"><title>Redirection d'URL</title>
198 <p>Les directives de configuration décrites dans les sections précédentes
199 demandent à httpd d'extraire un contenu depuis un emplacement spécifique
200 du système de fichiers
201 et de la retourner au client. Il est cependant parfois
202 souhaitable d'informer le
203 client que le contenu demandé est localisé à une URL différente, et de
204 demander au client d'élaborer une nouvelle requête avec la nouvelle URL.
205 Ce processus se nomme <em>redirection</em> et est implémenté par la
206 directive <directive module="mod_alias">Redirect</directive>.
207 Par exemple, si le contenu du répertoire <code>/foo/</code> sous
208 <directive module="core">DocumentRoot</directive> est déplacé vers le
209 nouveau répertoire <code>/bar/</code>, vous pouvez demander aux clients
210 de le requérir à sa nouvelle localisation comme suit :</p>
212 <example>Redirect permanent /foo/ http://www.example.com/bar/</example>
214 <p>Ceci aura pour effet de rediriger tout chemin d'URL commençant par
215 <code>/foo/</code> vers le même chemin d'URL sur le serveur
216 <code>www.example.com</code> en remplaçant <code>/foo/</code> par
217 <code>/bar/</code>. Vous pouvez rediriger les clients non seulement sur le
218 serveur d'origine, mais aussi vers n'importe quel autre serveur.</p>
220 <p>httpd propose aussi la directive <directive
221 module="mod_alias">RedirectMatch</directive> pour traiter les problèmes
222 de réécriture d'une plus grande complexité. Par exemple, afin de rediriger
223 les requêtes pour la page d'accueil du site vers un site différent, mais
224 laisser toutes les autres requêtes inchangées, utilisez la
225 configuration suivante :</p>
227 <example>RedirectMatch permanent ^/$
228 http://www.example.com/startpage.html</example>
230 <p>De même, pour rediriger temporairement toutes les pages d'un site
231 vers une page particulière d'un autre site, utilisez ce qui suit :</p>
233 <example>RedirectMatch temp .*
234 http://othersite.example.com/startpage.html</example>
237 <section id="proxy"><title>Mandataire inverse (Reverse Proxy)</title>
239 <p>httpd vous permet aussi de rapatrier des documents distants
240 dans l'espace des URL du serveur local.
241 Cette technique est appelée <em>mandataire inverse ou reverse
242 proxying</em> car le serveur web agit comme un serveur mandataire en
243 rapatriant les documents depuis un serveur distant puis les renvoyant
244 au client. Ceci diffère d'un service de mandataire usuel (direct) car, pour le client,
245 les documents semblent appartenir au serveur mandataire inverse.</p>
247 <p>Dans l'exemple suivant, quand les clients demandent des documents situés
248 dans le répertoire
249 <code>/foo/</code>, le serveur rapatrie ces documents depuis le répertoire
250 <code>/bar/</code> sur <code>internal.example.com</code>
251 et les renvoie au client comme s'ils appartenaient au serveur local.</p>
254 ProxyPass /foo/ http://internal.example.com/bar/<br />
255 ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
256 ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
257 ProxyPassReverseCookiePath /foo/ /bar/
260 <p>La directive <directive module="mod_proxy">ProxyPass</directive> configure
261 le serveur pour rapatrier les documents appropriés, alors que la directive
262 <directive module="mod_proxy">ProxyPassReverse</directive>
263 réécrit les redirections provenant de
264 <code>internal.example.com</code> de telle manière qu'elles ciblent le
265 répertoire approprié sur le serveur local. De manière similaire, les directives
266 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
267 et <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
268 réécrivent les cookies élaborés par le serveur d'arrière-plan.</p>
269 <p>Il est important de noter cependant, que les liens situés dans les documents
270 ne seront pas réécrits. Ainsi, tout lien absolu sur
271 <code>internal.example.com</code> fera décrocher le client
272 du serveur mandataire et effectuer sa requête directement sur
273 <code>internal.example.com</code>. Vous pouvez modifier ces liens (et
274 d'utres contenus) situés dans la page au moment où elle est envoyée au
275 client en utilisant le module <module>mod_substitute</module>.</p>
278 Substitute s/internal\.example\.com/www.example.com/i
281 <p>En outre, un module tiers
282 <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
283 permet de réécrire les liens dans les documents HTML et XHTML.</p>
286 <section id="rewrite"><title>Moteur de réécriture</title>
288 <p>Le moteur de réécriture <module>mod_rewrite</module> peut s'avérer
289 utile lorsqu'une substitution plus puissante est nécessaire.
290 Les directives fournies par ce module peuvent utiliser des caractéristiques de la
291 requête comme le type de navigateur ou l'adresse IP source afin de décider
292 depuis où servir le contenu. En outre, mod_rewrite peut utiliser des
293 fichiers ou programmes de bases de données externes pour déterminer comment
294 traiter une requête. Le moteur de réécriture peut effectuer les trois types
295 de mise en correspondance discutés plus haut :
296 redirections internes (aliases), redirections externes, et services mandataires.
297 De nombreux exemples pratiques utilisant mod_rewrite sont discutés dans la
298 <a href="rewrite/">documentation détaillée de mod_rewrite</a>.</p>
301 <section id="notfound"><title>Fichier non trouvé (File Not Found)</title>
303 <p>Inévitablement, apparaîtront des URLs qui ne correspondront à aucun
304 fichier du système de fichiers.
305 Ceci peut arriver pour de nombreuses raisons.
306 Il peut s'agir du déplacement de documents d'une
307 localisation vers une autre. Dans ce cas, le mieux est d'utiliser la
308 <a href="#redirect">redirection d'URL</a> pour informer les clients de la
309 nouvelle localisation de la ressource. De cette façon, vous êtes sur que
310 les anciens signets et liens continueront de fonctionner, même si la
311 ressource est déplacée.</p>
313 <p>Une autre cause fréquente d'erreurs "File Not Found" est l'erreur de
314 frappe accidentelle dans les URLs, soit directement dans le navigateur,
315 soit dans les liens HTML. httpd propose le module
316 <module>mod_speling</module> (sic) pour tenter de résoudre ce problème.
317 Lorsque ce module est activé, il intercepte les erreurs
318 "File Not Found" et recherche une ressource possédant un nom de fichier
319 similaire. Si un tel fichier est trouvé, mod_speling va envoyer une
320 redirection HTTP au client pour lui communiquer l'URL correcte.
321 Si plusieurs fichiers proches sont trouvés, une liste des alternatives
322 possibles sera présentée au client.</p>
324 <p>mod_speling possède une fonctionnalité particulièrement utile :
325 il compare les noms de fichiers sans tenir compte de la casse.
326 Ceci peut aider les systèmes où les utilisateurs ne connaissent pas la
327 sensibilité des URLs à la casse et bien sûr les systèmes de fichiers unix.
328 Mais l'utilisation de mod_speling pour toute autre chose que la correction
329 occasionnelle d'URLs peut augmenter la charge du serveur, car chaque
330 requête "incorrecte" entraîne une redirection d'URL et une nouvelle requête
331 de la part du client.</p>
333 <p><module>mod_dir</module> fournit la directive <directive
334 module="mod_dir">FallbackResource</directive> qui permet d'associer
335 des URIs virtuels à une ressource réelle qui peut ainsi les servir.
336 Cette directive remplace avantageusement
337 <module>mod_rewrite</module> lors de l'implémentation d'un
338 "contrôleur frontal".</p>
340 <p>Si toutes les tentatives pour localiser le contenu
341 échouent, httpd
342 retourne une page d'erreur avec le code de statut HTTP 404
343 (file not found). L'apparence de cette page est contrôlée à l'aide de la
344 directive <directive module="core">ErrorDocument</directive>
345 et peut être personnalisée de manière très flexible comme discuté dans le
347 <a href="custom-error.html">Réponses personnalisées aux erreurs</a>.</p>
350 <section id="other"><title>Autres modules de mise en correspondance des
353 <!-- TODO Flesh out each of the items in the list below. -->
355 <p>Les autres modules disponibles pour la mise en correspondance des
358 <li><module>mod_actions</module> - Met une URL en correspondance
359 avec un script CGI en fonction de la méthode de la requête, ou du
360 type MIME de la ressource.</li>
361 <li><module>mod_dir</module> - Permet une mise en correspondance
362 basique d'un slash terminal dans un fichier index comme
363 <code>index.html</code>.</li>
364 <li><module>mod_imagemap</module> - Met en correspondance une
365 requête avec une URL en fonction de la zone d'une image intégrée à
366 un document HTML dans laquelle un utilisateur clique.</li>
367 <li><module>mod_negotiation</module> - Sélectionne le document
368 approprié en fonction de préférences du client telles que la langue
369 ou la compression du contenu.</li>