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