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