]> granicus.if.org Git - apache/blob - docs/manual/sections.xml.fr
Remove useless <br \> in highlight blocks.
[apache] / docs / manual / sections.xml.fr
1 <?xml version="1.0" encoding="UTF-8" ?>
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: 1731194 -->
7
8 <!--
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
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
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.
23 -->
24
25 <manualpage metafile="sections.xml.meta">
26
27 <title>Sections de configuration</title>
28
29 <summary> <p>Les directives des <a
30 href="configuring.html">fichiers de configuration</a> peuvent s'appliquer
31 au serveur dans son ensemble, ou seulement à des répertoires, fichiers, hôtes,
32 ou URLs particuliers.  Ce document décrit comment utiliser les conteneurs de
33 sections de configuration ou les fichiers <code>.htaccess</code> pour
34 modifier la portée des directives de configuration.</p>
35 </summary>
36
37 <section id="types"><title>Types de conteneurs de sections de
38 configuration</title>
39
40 <related>
41 <modulelist>
42 <module>core</module>
43 <module>mod_version</module>
44 <module>mod_proxy</module>
45 </modulelist>
46 <directivelist>
47 <directive type="section" module="core">Directory</directive>
48 <directive type="section" module="core">DirectoryMatch</directive>
49 <directive type="section" module="core">Files</directive>
50 <directive type="section" module="core">FilesMatch</directive>
51 <directive type="section" module="core">If</directive>
52 <directive type="section" module="core">IfDefine</directive>
53 <directive type="section" module="core">IfModule</directive>
54 <directive type="section" module="mod_version">IfVersion</directive>
55 <directive type="section" module="core">Location</directive>
56 <directive type="section" module="core">LocationMatch</directive>
57 <directive type="section" module="mod_proxy">Proxy</directive>
58 <directive type="section" module="mod_proxy">ProxyMatch</directive>
59 <directive type="section" module="core">VirtualHost</directive>
60 </directivelist>
61 </related>
62
63 <p>Il existe deux grands types de conteneurs.  La plupart des conteneurs sont
64 évalués pour chaque requête.  Les directives qu'ils contiennent s'appliquent
65 seulement aux requêtes qui sont concernées par le conteneur.  En revanche,
66 les conteneurs
67 <directive type="section" module="core">IfDefine</directive>, <directive
68 type="section" module="core">IfModule</directive>, et
69 <directive type="section" module="mod_version">IfVersion</directive> sont
70 évalués seulement au démarrage et au redémarrage du serveur.
71 Si leurs conditions sont vérifiées au démarrage, les directives qu'ils contiennent
72 s'appliqueront à toutes les requêtes.  Si leurs conditions ne sont pas vérifiées, les
73 directives qu'ils contiennent seront ignorées.</p>
74
75 <p>Le conteneur <directive type="section" module="core">IfDefine</directive>
76 contient des directives qui ne seront appliquées que si un paramètre
77 approprié a été défini dans la ligne de commande de <program>httpd</program>.
78 Par exemple,
79 avec la configuration suivante, toutes les requêtes seront redirigées vers
80 un autre site si le serveur est démarré en utilisant la ligne de commande :
81 <code>httpd -DClosedForNow</code>:</p>
82
83 <highlight language="config">
84 &lt;IfDefine ClosedForNow&gt;
85     Redirect "/" "http://otherserver.example.com/"
86 &lt;/IfDefine&gt;
87 </highlight>
88
89 <p>Le conteneur <directive type="section" module="core">IfModule</directive>
90 est similaire; les directives qu'il contient ne s'appliqueront que si
91 un module particulier est disponible au niveau du serveur.
92 Le module doit être soit compilé statiquement dans le serveur, soit
93 dynamiquement et dans ce cas, la ligne <directive
94 module="mod_so">LoadModule</directive> correspondante doit apparaître
95 plus haut dans le fichier de configuration.  Ce conteneur ne doit être
96 utilisé que dans le cas où votre fichier de configuration doit fonctionner
97 indépendamment de la présence ou de l'absence de certains modules.
98 Il ne doit pas contenir de directives que vous souhaitez voir s'appliquer
99 systématiquement, car vous pouvez perdre ainsi de précieux messages d'erreur
100 à propos de modules manquants.</p>
101
102 <p>Dans l'exemple suivant, la directive <directive
103 module="mod_mime_magic">MimeMagicFile</directive> ne s'appliquera que si le
104 module <module>mod_mime_magic</module> est disponible.</p>
105
106 <highlight language="config">
107 &lt;IfModule mod_mime_magic.c&gt;
108     MimeMagicFile "conf/magic"
109 &lt;/IfModule&gt;
110 </highlight>
111
112 <p>Le conteneur
113 <directive type="section" module="mod_version">IfVersion</directive>
114 est similaire aux conteneurs <directive type="section"
115 module="core">IfDefine</directive> et <directive type="section"
116 module="core">IfModule</directive>; les directives qu'il contient ne
117 s'appliqueront que si une version particulière du serveur s'exécute.  Ce
118 conteneur a été conçu pour une utilisation dans les suites de tests
119 et les grands réseaux qui doivent prendre en compte différentes versions
120 et configurations de httpd.</p>
121
122 <highlight language="config">
123 &lt;IfVersion >= 2.4&gt;
124     # les directives situées ici ne s'appliquent que si la version <br />
125     # est supérieure ou égale à 2.4.0.
126 &lt;/IfVersion&gt;
127 </highlight>
128
129 <p><directive type="section" module="core">IfDefine</directive>,
130 <directive type="section" module="core">IfModule</directive>, et
131 <directive type="section" module="mod_version">IfVersion</directive>
132 peuvent inverser leur test conditionnel en le faisant précéder d'un "!".
133 De plus, ces sections peuvent être imbriquées afin de définir des restrictions
134 plus complexes.</p>
135 </section>
136
137 <section id="file-and-web"><title>Système de fichiers,
138 arborescence du site web et expressions booléennes</title>
139
140 <p>Les conteneurs de sections de configuration les plus couramment utilisés
141 sont ceux qui modifient la configuration de points particuliers du système de
142 fichiers ou de l'arborescence du site web.  Tout d'abord, il est important de
143 comprendre la différence entre les deux.  Le système de fichiers est une vue
144 de vos disques tels qu'ils sont perçus par votre système d'exploitation.
145 Par exemple, avec une installation par défaut,
146 Apache httpd est situé dans <code>/usr/local/apache2</code> pour le système de
147 fichiers UNIX, ou <code>"c:/Program Files/Apache Group/Apache2"</code> pour
148 le système de fichiers Windows.  (Notez que des slashes directs doivent
149 toujours être utilisés comme séparateur de chemin
150 dans les fichiers de configuration d'Apache httpd, même sous
151 Windows.)  Quant à
152 l'arborescence du site web, il s'agit d'une vue de votre site
153 tel que présenté par le
154 serveur web et perçue par le client.  Ainsi le chemin <code>/dir/</code> dans
155 l'arborescence du site web correspond au chemin
156 <code>/usr/local/apache2/htdocs/dir/</code> dans le système de fichiers pour
157 une installation d'Apache httpd par défaut sous UNIX.
158 En outre, l'arborescence du site web n'a pas besoin de correspondre en permanence au
159 système de fichiers, car les pages web peuvent être générées dynamiquement
160 à partir de bases de données ou d'autres emplacements.</p>
161
162 <section id="filesystem"><title>Conteneurs de système de fichiers</title>
163
164 <p>Les conteneurs <directive type="section" module="core">Directory</directive>
165 et <directive type="section" module="core">Files</directive>,
166 ainsi que leurs équivalents acceptant les
167 <glossary ref="regex">expressions rationnelles</glossary>,
168 appliquent des directives à certaines parties du système de fichiers.
169 Les directives contenues dans une section <directive
170 type="section" module="core">Directory</directive> s'appliquent au répertoire
171 précisé, ainsi qu'à tous ses sous-répertoires et aux fichiers que ces
172 derniers contiennent.
173 Le même effet peut être obtenu en utilisant les <a
174 href="howto/htaccess.html">fichiers .htaccess</a>.  Par exemple, avec la
175 configuration suivante, l'indexation sera activée pour le répertoire
176 <code>/var/web/dir1</code> et tous ses sous-répertoires.</p>
177
178 <highlight language="config">
179 &lt;Directory "/var/web/dir1"&gt;
180     Options +Indexes
181 &lt;/Directory&gt;
182 </highlight>
183
184 <p>Les directives contenues dans une section <directive type="section"
185 module="core">Files</directive> s'appliquent à tout fichier
186 avec le nom spécifié, quel que soit le répertoire dans lequel il se trouve.
187 Ainsi par exemple, les directives de configuration suivantes, si elles sont
188 placées dans la section principale du fichier de configuration, vont interdire
189 l'accès à tout fichier nommé <code>private.html</code> quel que soit
190 l'endroit où il se trouve.</p>
191
192 <highlight language="config">
193 &lt;Files "private.html"&gt;
194     Require all denied
195 &lt;/Files&gt;
196 </highlight>
197
198 <p>Pour faire référence à des fichiers qui se trouvent en des points
199 particuliers du système de fichiers, les sections
200 <directive type="section" module="core">Files</directive> et
201 <directive type="section" module="core">Directory</directive>
202 peuvent être combinées.  Par exemple, la configuration suivante va interdire
203 l'accès à <code>/var/web/dir1/private.html</code>,
204 <code>/var/web/dir1/subdir2/private.html</code>,
205 <code>/var/web/dir1/subdir3/private.html</code>, ainsi que toute instance de
206 <code>private.html</code> qui se trouve dans l'arborescence
207 <code>/var/web/dir1/</code>.</p>
208
209 <highlight language="config">
210 &lt;Directory "/var/web/dir1"&gt;
211     &lt;Files "private.html"&gt;
212         Require all denied
213     &lt;/Files&gt;
214 &lt;/Directory&gt;
215 </highlight>
216 </section>
217
218 <section id="webspace"><title>Conteneurs de l'arborescence du site web</title>
219
220 <p>le conteneur <directive type="section" module="core">Location</directive>
221 et son équivalent acceptant les
222 <glossary ref="regex">expressions rationnelles</glossary>, modifient quant à eux la
223 configuration de parties de l'arborescence du site web.  Par exemple, la
224 configuration suivante interdit l'accès à toute URL dont la partie chemin
225 commence par /private.
226 En particulier, l'interdiction s'appliquera aux requêtes pour :
227 <code>http://yoursite.example.com/private</code>,
228 <code>http://yoursite.example.com/private123</code>, et
229 <code>http://yoursite.example.com/private/dir/file.html</code> ainsi qu'à
230 toute requête commençant par la chaîne de caractères <code>/private</code>.</p>
231
232 <highlight language="config">
233 &lt;LocationMatch "^/private"&gt;
234     Require all denied
235 &lt;/LocationMatch&gt;
236 </highlight>
237
238 <p>Le conteneur <directive type="section" module="core">Location</directive>
239 n'a pas besoin de faire référence à un élément du système de fichiers.
240 Par exemple, l'exemple suivant montre comment faire référence à une URL
241 particulière vers un gestionnaire interne du serveur HTTP Apache fourni par le module
242 <module>mod_status</module>.
243 Il n'est pas nécessaire de trouver un fichier nommé <code>server-status</code>
244 dans le système de fichiers.</p>
245
246 <highlight language="config">
247 &lt;Location "/server-status"&gt;
248     SetHandler server-status
249 &lt;/Location&gt;
250 </highlight>
251 </section>
252
253 <section id="overlapping-webspace"><title>Espace web imbriqué</title>
254 <p>Pour contrôler deux URLs imbriquées, on doit tenir compte de l'ordre
255 dans lequel certaines sections ou directives sont évaluées. Pour
256 <directive type="section" module="core">Location</directive>, on doit
257 avoir :</p>
258 <highlight language="config">
259 &lt;Location "/foo"&gt;
260 &lt;/Location&gt;
261 &lt;Location "/foo/bar"&gt;
262 &lt;/Location>
263 </highlight>
264 <p>Les directives <directive type="section"
265 module="mod_alias">Alias</directive>, quant à elles, sont évaluées vice-versa :</p>
266 <highlight language="config">
267 Alias "/foo/bar" "/srv/www/uncommon/bar"
268 Alias "/foo" "/srv/www/common/foo"
269 </highlight>
270 <p>Ceci est aussi vrai pour les directives <directive
271 module="mod_proxy">ProxyPass</directive> :</p>
272 <highlight language="config">
273 ProxyPass "/special-area" "http://special.example.com" smax=5 max=10
274 ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On
275 </highlight>
276 </section>
277
278
279 <section id="wildcards"><title>Caractères de remplacement
280 et expressions rationnelles</title>
281
282 <p>Les conteneurs
283 <directive type="section" module="core">Directory</directive>,
284 <directive type="section" module="core">Files</directive>, et
285 <directive type="section" module="core">Location</directive>
286 peuvent utiliser des caractères de remplacement de style shell comme dans
287 la fonction <code>fnmatch</code> de la bibliothèque C standard.
288 Le caractère "*"
289 correspond à toute séquence de caractères, "?" à un caractère seul,
290 et "[<em>seq</em>]" à tout caractère contenu dans <em>seq</em>.
291 Le caractère "/"
292 ne peut pas faire l'objet d'un remplacement;
293 il doit être spécifié explicitement.</p>
294
295 <p>Si une définition des critères de correspondance
296 encore plus souple est nécessaire, chaque conteneur
297 possède son équivalent acceptant les expressions rationnelles : <directive
298 type="section" module="core">DirectoryMatch</directive>, <directive
299 type="section" module="core">FilesMatch</directive>, et <directive
300 type="section" module="core">LocationMatch</directive> acceptent les
301 <glossary ref="regex">expressions rationnelles</glossary> compatibles Perl
302 pour définir les critères de correspondance.  Mais voyez plus loin la section
303 à propos de la combinaison des sections de configuration
304 pour comprendre comment l'utilisation de
305 conteneurs avec des expressions rationnelles va modifier la manière
306 dont les directives sont appliquées.</p>
307
308 <p>Un conteneur qui modifie la configuration de tous les
309 répertoires utilisateurs à l'aide de caractères de remplacement
310 mais sans utiliser
311 les expressions rationnelles pourrait ressembler à ceci :</p>
312
313 <highlight language="config">
314 &lt;Directory "/home/*/public_html"&gt;
315     Options Indexes
316 &lt;/Directory&gt;
317 </highlight>
318
319 <p>Avec les conteneurs utilisant les expressions rationnelles,
320 on peut interdire l'accès à de nombreux types de fichiers d'images
321 simultanément :</p>
322 <highlight language="config">
323 +&lt;FilesMatch "\.(?i:gif|jpe?g|png)$"&gt;
324     Require all denied
325 &lt;/FilesMatch&gt;
326 </highlight>
327
328 <p>Les expressions rationnelles contenant des <strong>groupes nommés et
329 des références arrières</strong> sont ajoutées à l'environnement avec
330 leur nom en majuscules. Ceci permet de référencer des éléments de
331 chemins de fichiers et d'URLs depuis une <a
332 href="expr.html">expression</a> et au sein de modules comme
333 <module>mod_rewrite</module>.</p>
334
335 <highlight language="config">
336 &lt;DirectoryMatch "^/var/www/combined/(?&lt;SITENAME&gt;[^/]+)"&gt;
337     require ldap-group "cn=%{env:MATCH_SITENAME},ou=combined,o=Example"
338 &lt;/DirectoryMatch&gt;
339 </highlight>
340
341 </section>
342
343 <section id="expressions"><title>Expressions booléennes</title>
344 <p>La directive <directive type="section" module="core">If</directive>
345 permet de modifier la configuration en fonction d'une condition qui peut
346 être définie sous la forme d'une expression booléenne. Dans l'exemple
347 suivant, l'accès est interdit si l'en-tête HTTP Referer ne commence pas
348 par "http://www.example.com/".</p>
349 <highlight language="config">
350 &lt;If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')"&gt;
351     Require all denied
352 &lt;/If&gt;
353 </highlight>
354
355 </section>
356
357 <section id="whichwhen"><title>Que faut-il utiliser et quand ?</title>
358
359 <p>Choisir entre des conteneurs de système de fichiers et des conteneurs
360 d'arborescence du site web est vraiment très simple.
361 Pour appliquer des directives à des objets qui résident dans le système de
362 fichiers, utilisez toujours un conteneur <directive type="section"
363 module="core">Directory</directive> ou <directive type="section"
364 module="core">Files</directive>.  Pour appliquer des directives à des objets
365 qui ne résident pas dans le système de fichiers (comme une page web générée
366 par une base de données), utilisez un conteneur <directive type="section"
367 module="core">Location</directive>.</p>
368
369 <p>Il ne faut jamais utiliser un conteneur <directive type="section"
370 module="core">Location</directive> pour restreindre l'accès à des
371 objets du système de fichiers, car plusieurs localisations de
372 l'arborescence du site web (URLs) peuvent correspondre à la même localisation
373 du système de fichier, ce qui peut permettre de contourner vos restrictions.
374 Par exemple, imaginez la configuration suivante :</p>
375
376 <highlight language="config">
377 &lt;Location "/dir/"&gt;
378     Require all denied
379 &lt;/Location&gt;
380 </highlight>
381
382 <p>Elle fonctionne correctement si la requête appelle
383 <code>http://yoursite.example.com/dir/</code>.  Mais que va-t-il se passer si
384 votre système de fichiers est insensible à la casse ?
385 Votre restriction va pouvoir être tout simplement contournée en envoyant une
386 requête sur
387 <code>http://yoursite.example.com/DIR/</code>.  Le conteneur <directive
388 type="section" module="core">Directory</directive>, quant à lui, s'appliquera
389 à tout contenu servi à partir de cette localisation,
390 sans tenir compte de la manière dont il est appelé.
391 (Les liens du système de fichiers constituent une exception.
392 Le même répertoire peut être placé dans plusieurs parties du système de
393 fichiers en utilisant des liens symboliques.  Le conteneur
394 <directive type="section" module="core">Directory</directive> va suivre le
395 lien symbolique sans modifier le nom du chemin.  Par conséquent, pour plus de
396 sécurité, les liens symboliques doivent être désactivés à l'aide de la
397 directive
398 <directive module="core">Options</directive> appropriée.)</p>
399
400 <p>Si vous pensez que vous n'êtes pas concerné par ce problème
401 parceque vous utilisez un système de fichiers sensible à la casse,
402 gardez à l'esprit qu'il y a de nombreuses autres manières pour faire
403 correspondre plusieurs localisations de l'arborescence du site web à la même
404 localisation du système de fichiers.  C'est pourquoi vous devez autant que
405 possible toujours utiliser les conteneurs de système de fichiers.
406 Il y a cependant une exception à cette règle.  Placer des restrictions de
407 configuration dans un conteneur <code>&lt;Location
408 "/"&gt;</code> est tout à fait sans rique car ce conteneur va s'appliquer à
409 toutes les requêtes sans tenir compte de l'URL spécifique.</p>
410 </section>
411
412 <section id="nesting"><title>Imbrication des sections</title>
413
414 <p>Certains types de sections peuvent être imbriqués : d'une part, on
415 peut utiliser les sections <directive type="section"
416 module="core">Files</directive> à l'intérieur des sections <directive
417 type="section" module="core">Directory</directive>, d'autre part, on
418 peut utiliser les
419 directives <directive type="section" module="core">If</directive> à
420 l'intérieur des sections <directive type="section"
421 module="core">Directory</directive>, <directive type="section"
422 module="core">Location</directive> et <directive type="section"
423 module="core">Files</directive>. Les valeurs des expressions
424 rationnelles correspondant aux sections nommées se comportent de manière
425 identique.</p>
426
427 <p>Les sections imbriquées sont fusionnées après les sections
428 non-imbriquées de même type.</p>
429
430 </section>
431
432 </section>
433
434 <section id="virtualhost"><title>Hôtes virtuels</title>
435
436 <p>Le conteneur <directive type="section" module="core">VirtualHost</directive>
437 contient des directives qui s'appliquent à des hôtes spécifiques.
438 Ceci s'avère utile pour servir des hôtes multiples à partir de la même machine,
439 chacun d'entre eux possédant une configuration différente.  Pour de plus amples
440 informations,
441 voir la <a href="vhosts/">Documentation sur les hôtes virtuels</a>.</p>
442 </section>
443
444 <section id="proxy"><title>Mandataire</title>
445
446 <p>Les conteneurs
447 <directive type="section" module="mod_proxy">Proxy</directive>
448 et <directive type="section" module="mod_proxy">ProxyMatch</directive>
449 appliquent les directives de configuration qu'ils contiennent uniquement aux
450 sites qui correspondent à l'URL spécifiée et auxquels on a
451 accédé via le serveur mandataire du module <module>mod_proxy</module>.
452 Par exemple, la configuration suivante n'autorisera qu'un sous-ensemble de
453 clients à accéder au site <code>www.example.com</code> en passant par le serveur
454 mandataire :.</p>
455
456 <highlight language="config">
457 &lt;Proxy "http://www.example.com/*"&gt;
458     Require host yournetwork.example.com
459 &lt;/Proxy&gt;
460 </highlight>
461 </section>
462
463 <section id="whatwhere"><title>Quelles sont les directives autorisées ?</title>
464
465 <p>Pour déterminer quelles sont les directives autorisées pour tel type de
466 section de configuration, vérifiez le <a
467 href="mod/directive-dict.html#Context">Contexte</a> de la directive.
468 Tout ce qui est autorisé dans les sections
469 <directive type="section" module="core">Directory</directive>
470 l'est aussi d'un point de vue syntaxique dans les sections
471 <directive type="section" module="core">DirectoryMatch</directive>,
472 <directive type="section" module="core">Files</directive>,
473 <directive type="section" module="core">FilesMatch</directive>,
474 <directive type="section" module="core">Location</directive>,
475 <directive type="section" module="core">LocationMatch</directive>,
476 <directive type="section" module="mod_proxy">Proxy</directive>,
477 et <directive type="section" module="mod_proxy">ProxyMatch</directive>.
478 Il y a cependant quelques exceptions :</p>
479
480 <ul>
481 <li>La directive <directive module="core">AllowOverride</directive>
482 ne fonctionne que dans les sections
483 <directive type="section" module="core">Directory</directive>.</li>
484
485 <li>Les <directive
486 module="core">Options</directive> <code>FollowSymLinks</code> et
487 <code>SymLinksIfOwnerMatch</code>  ne fonctionnent que dans les sections
488 <directive type="section" module="core">Directory</directive> ou les fichiers
489 <code>.htaccess</code>.</li>
490
491 <li>La directive <directive module="core">Options</directive> ne peut pas être
492 utilisée dans les sections
493 <directive type="section" module="core">Files</directive>
494 et <directive type="section" module="core">FilesMatch</directive>.</li>
495 </ul>
496 </section>
497
498 <section id="merging"><title>Comment les sections sont combinées entre elles</title>
499
500 <p>Les sections de configuration sont appliquées dans un ordre très particulier.
501 Il est important de savoir comment cet ordre est défini car il peut avoir
502 des effets importants sur la manière dont les directives de configuration
503 sont interprétées.</p>
504
505     <p>L'ordre dans lequel les sections sont combinées est :</p>
506
507     <ol>
508       <li> Les sections <directive type="section"
509       module="core">Directory</directive> (à l'exception des
510       expressions rationnelles)
511       et les fichiers <code>.htaccess</code> sont appliqués simultanément (avec
512       la possibilité pour <code>.htaccess</code>, s'il y est autorisé, de
513       prévaloir sur
514       <directive type="section" module="core">Directory</directive>)</li>
515
516       <li>Les sections
517       <directive type="section" module="core">DirectoryMatch</directive>
518       (et <code>&lt;Directory "~"&gt;</code>)</li>
519
520       <li>Les sections <directive type="section"
521       module="core">Files</directive> et <directive
522       type="section" module="core">FilesMatch</directive> sont appliquées
523       simultanément</li>
524
525       <li>Les sections
526       <directive type="section" module="core">Location</directive>
527       et <directive type="section"
528       module="core">LocationMatch</directive> sont appliquées
529       simultanément</li>
530
531       <li>Les directives <directive type="section" module="core">If</directive>
532       </li>
533     </ol>
534
535     <p>Mises à part les sections <directive type="section"
536     module="core">Directory</directive>, chaque groupe est traité selon
537     l'ordre dans lequel il apparaît dans les fichiers de configuration.
538     Les sections <directive
539     type="section" module="core">Directory</directive> (groupe 1 ci-dessus)
540     sont traitées dans l'ordre du répertoire le plus court vers le plus long.
541     Par exemple, <code>&lt;Directory "/var/web/dir"&gt;</code> sera
542     traité avant <code>&lt;Directory
543     "/var/web/dir/subdir"&gt;</code>.  Si plusieurs sections <directive
544     type="section" module="core">Directory</directive> s'appliquent au même
545     répertoire, elles sont traitées selon l'ordre dans lequel elles
546     apparaissent dans le fichier de configuration.
547     Les sections de configuration incluses via la directive <directive
548     module="core">Include</directive> sont traitées comme si elles se
549     trouvaient réellement dans le fichier qui les inclut à la position de la
550     directive
551     <directive module="core">Include</directive>.</p>
552
553     <p>Les sections situées à l'intérieur de sections <directive type="section"
554     module="core">VirtualHost</directive>
555     sont appliquées <em>après</em> les sections correspondantes situées en
556     dehors de la définition de l'hôte virtuel, ce qui permet à l'hôte virtuel
557     de prévaloir sur la configuration du serveur principal.</p>
558
559     <p>Quand la requête est servie par le module <module>mod_proxy</module>,
560     le conteneur <directive module="mod_proxy" type="section">Proxy</directive>
561     prend la place du conteneur <directive module="core"
562     type="section">Directory</directive> dans l'ordre de traitement.</p>
563     
564         <note><title>Note technique</title>
565         Une séquence <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
566         est réellement traitée juste avant la phase de traduction du nom
567         (où <code>Aliases</code> et <code>DocumentRoots</code>
568       sont utilisés pour faire correspondre les URLs aux noms de fichiers).
569       Les effets de cette séquence disparaissent totalement lorsque
570       la traduction est terminée.
571         </note>
572
573 <section id="relationship-module-configuration"><title>Interactions entre
574 modules et sections de configuration</title>
575     <p>Une question se pose souvent après avoir lu comment les sections de
576     configuration sont fusionnées : comment et quand les directives de modules
577     particuliers comme <module>mod_rewrite</module> sont-elles interprétées ? La
578     réponse n'est pas triviale et nécessite un approfondissement. Chaque module
579     httpd gère sa propre configuration, et chacune de ses directives dans
580     httpd.conf définit un élément de configuration dans un contexte particulier.
581     httpd n'exécute pas un commande au moment où elle est lue.</p>
582     <p>A l'exécution, le noyau de httpd parcours les sections de configuration
583     dans l'ordre décrit ci-dessus afin de déterminer lesquelles s'appliquent à
584     la requête courante. Lorsqu'une première section s'applique, elle est
585     considérée comme la configuration courante pour cette requête. Si une
586     section suivante s'applique aussi, chaque module qui possède des directives
587     dans chacune de ces sections a la possibilité de fusionner sa configuration
588     entre ces deux sections. Il en résulte une troisième configuration et le
589     processus de fusion se poursuit jusqu'à ce que toutes les sections de
590     configuration aient été évaluées.</p>
591     <p>Après l'étape précédente, le traitement proprement dit de la requête HTTP
592     peut commencer : chaque module peut effectuer toute tâche qui lui incombe,
593     et pour déterminer de quelle manière dont il doit agir, il peut s'appuyer
594     sur le noyau de httpd pour retrouver sa configuration globale issue de la
595     fusion précédente.</p>
596     <p>Un exemple permet de mieux visualiser l'ensemble du processus. la
597     configuration suivante utilise la directive <directive
598     module="mod_headers">Header</directive> du module
599     <module>mod_headers</module> pour définir un en-tête HTTP spécifique. Quelle
600     valeur httpd va-t-il affecter à l'en-tête <code>CustomHeaderName</code> pour
601     une requête vers <code>/example/index.html</code> ?
602     </p>
603     <highlight language="config">
604
605 &lt;Directory "/"&gt;
606     Header set CustomHeaderName one
607     &lt;FilesMatch ".*"&gt;
608         Header set CustomHeaderName three
609     &lt;/FilesMatch&gt;
610 &lt;/Directory&gt;
611
612 &lt;Directory "/example"&gt;
613     Header set CustomHeaderName two
614 &lt;/Directory&gt;
615      
616     </highlight>    
617     <ul>
618         <li><directive>Directory</directive> "/" s'applique, et une configuration
619         initiale est créée qui définit l'en-tête <code>CustomHeaderName</code>
620         avec la valeur <code>one</code>.</li>
621         <li><directive>Directory</directive> "/example" s'applique, et comme
622         <module>mod_headers</module> spécifie dans son code que
623         la valeur d'un en-tête doit être écrasée si ce dernier est défini à
624         nouveau, une nouvelle configuration est créée qui définit l'en-tête
625         <code>CustomHeaderName</code> avec la valeur <code>two</code>.</li>
626         <li><directive>FilesMatch</directive> ".*" s'applique, une nouvelle
627         opportunité de fusion surgit, et l'en-tête <code>CustomHeaderName</code>
628         est défini à la valeur <code>three</code>.</li>
629         <li>Finalement, au cours des étapes suivantes du traitement de la
630         requête HTTP, <module>mod_headers</module> sera sollicité, et il se
631         basera sur la configuration qui a défini l'en-tête
632         <code>CustomHeaderName</code> à la valeur <code>three</code>.
633         <module>mod_headers</module> utilise normalement cette configuration pour
634         accomplir sa tâche, à savoir définir des en-têtes HTTP. Cela ne veut
635         cependant pas dire qu'un module ne peut pas effectuer des actions plus
636         complexes comme désactiver des directives car elle ne sont pas
637         nécessaires ou obsolètes, etc...</li>
638     </ul>
639
640     <p>Ceci est aussi vrai pour les fichiers .htaccess car ils possèdent la même
641     priorité que les sections <directive>Directory</directive> dans l'ordre de
642     fusion. Il faut bien comprendre que les sections de configuration comme
643     <directive>Directory</directive> et <directive>FilesMatch</directive> ne
644     sont pas comparables avec les directives spécifiques de modules comme
645     <directive module="mod_headers">Header</directive> ou <directive
646     module="mod_rewrite">RewriteRule</directive> car elles agissent à des
647     niveaux différents.
648     </p>
649 </section>      
650
651 <section id="merge-examples"><title>Quelques exemples utiles</title>
652
653 <p>Voici un exemple imaginaire qui montre l'ordre de combinaison des sections.
654 En supposant qu'elles s'appliquent toutes à la requête, les directives de
655 cet exemple seront appliquées dans l'ordre suivant : A &gt; B &gt; C &gt; D &gt;
656 E.</p>
657
658 <highlight language="config">
659 &lt;Location "/"&gt;
660     E
661 &lt;/Location&gt;
662
663 &lt;Files "f.html"&gt;
664     D
665 &lt;/Files&gt;
666
667 &lt;VirtualHost *&gt;
668 &lt;Directory "/a/b"&gt;
669     B
670 &lt;/Directory&gt;
671 &lt;/VirtualHost&gt;
672
673 &lt;DirectoryMatch "^.*b$"&gt;
674     C
675 &lt;/DirectoryMatch&gt;
676
677 &lt;Directory "/a/b"&gt;
678     A
679 &lt;/Directory&gt;
680
681 </highlight>
682
683 <p>Pour un exemple plus concret, considérez ce qui suit.  Sans tenir compte
684 de toute restriction d'accès placée dans les sections <directive module="core"
685 type="section">Directory</directive>, la section <directive
686 module="core" type="section">Location</directive> sera
687 évaluée en dernier et permettra un accès au serveur sans aucune restriction.
688 En d'autres termes, l'ordre de la combinaison des sections est important,
689 soyez donc prudent !</p>
690
691 <highlight language="config">
692 &lt;Location "/"&gt;
693     Require all granted
694 &lt;/Location&gt;
695
696 # Arrghs!  Cette section &lt;Directory&gt; n'aura aucun effet
697 &lt;Directory "/"&gt;
698     &lt;RequireAll&gt;
699         Require all granted
700         Require not host badguy.example.com
701     &lt;/RequireAll&gt;
702 &lt;/Directory&gt;
703 </highlight>
704
705 </section>
706
707 </section>
708 </manualpage>