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
|
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
<!-- English Revision: 1553502:1554275 (outdated) -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<modulesynopsis metafile="mod_dir.xml.meta">
<name>mod_dir</name>
<description>Permet la redirection des adresses se terminant par un
répertoire sans slash de fin et la mise à disposition des fichiers index
de répertoire</description>
<status>Base</status>
<sourcefile>mod_dir.c</sourcefile>
<identifier>dir_module</identifier>
<summary>
<p>L'index d'un répertoire peut provenir de deux sources :</p>
<ul>
<li>Un fichier écrit par l'utilisateur, dont le nom, en général
appelé <code>index.html</code>, peut être défini à l'aide de la
directive <directive module="mod_dir">DirectoryIndex</directive>
fournie par le module <module>mod_dir</module>.</li>
<li>Un listing généré par le serveur, par l'intermédiaire du
module <module>mod_autoindex</module>.</li>
</ul>
<p>Les deux fonctions sont bien distinctes, si bien que vous pouvez
supprimer (ou remplacer) la génération automatique d'index, si vous
le souhaitez.</p>
<p>Une redirection "slash de fin" est effectuée lorsque le serveur
reçoit une requête pour une URL du style
<code>http://nom-serveur/foo/nom-rep</code> où <code>nom-rep</code>
est le nom d'un répertoire. Comme les répertoires nécessitent un slash de
fin, <module>mod_dir</module> effectue une redirection vers
<code>http://nom-serveur/foo/nom-rep/</code>.</p>
</summary>
<directivesynopsis>
<name>DirectoryIndex</name>
<description>Liste des fichiers ressources à rechercher lorsque le
client envoie une requête pour un répertoire</description>
<syntax>DirectoryIndex
disabled | <var>url locale</var> [<var>url locale</var>] ...</syntax>
<default>DirectoryIndex index.html</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<usage>
<p>La directive <directive>DirectoryIndex</directive> permet de
définir une liste de fichiers ressources à rechercher lorsqu'un
client envoie une requête pour l'index d'un répertoire, en ajoutant
un '/' à la fin du nom de ce dernier. <var>url locale</var> est
l'URL (codée avec caractères '%') d'un document du serveur, relative
au répertoire faisant l'objet de la requête ; il s'agit en général
du nom d'un fichier situé dans le répertoire. Si plusieurs URLs sont
fournies, le serveur renverra la première d'entre elles qui
correspond à une ressource existante. Si aucune ressource ne
correspond à la liste des URLs spécifiées, et si l'option
<code>Indexes</code> est définie, le serveur générera son propre
listing du répertoire.</p>
<example><title>Exemple</title>
<highlight language="config">
DirectoryIndex index.html
</highlight>
</example>
<p>Avec cette configuration, une requête pour l'URL
<code>http://example.com/docs/</code> renverrait au client la
ressource <code>http://example.com/docs/index.html</code> si elle
existe, ou provoquerait la génération du listing du répertoire si la
ressource n'existe pas.</p>
<p>Notez qu'il n'est pas nécessaire que les documents soient
relatifs au répertoire ;</p>
<highlight language="config">
DirectoryIndex index.html index.txt /cgi-bin/index.pl
</highlight>
<p>provoquerait l'exécution du script CGI
<code>/cgi-bin/index.pl</code> si aucun des fichiers
<code>index.html</code> ou <code>index.txt</code> n'existe dans le
répertoire considéré.</p>
<p>La spécification du seul argument "disabled" empêche
<module>mod_dir</module> de rechercher un index. Un argument
"disabled" sera interprété de manière littérale si d'autres
arguments sont présents avant ou après lui, même s'ils sont
eux-mêmes des arguments "disabled".</p>
<p><strong>Note :</strong>La définition de plusieurs directives
<directive>DirectoryIndex</directive> au sein d'un <a href="../sections.html"><em>même
contexte</em></a> permet d'ajouter des ressources à rechercher plutôt
que de remplacer celle déjà définies :
</p>
<highlight language="config">
# Exemple A: définit index.html comme page d'index, ainsi qu'index.php.
<Directory /foo>
DirectoryIndex index.html
DirectoryIndex index.php
</Directory>
# Exemple B: identique à l'exemple A, mais avec une seule directive.
<Directory /foo>
DirectoryIndex index.html index.php
</Directory>
# Exemple C: pour remplacer la liste des pages d'index par une autre,
# vous devez tout d'abord supprimer la première liste : dans l'exemple
# suivant, il ne restera qu'index.php comme page d'index.
<Directory /foo>
DirectoryIndex index.html
DirectoryIndex disabled
DirectoryIndex index.php
</Directory>
</highlight>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DirectoryIndexRedirect</name>
<description>Définit une redirection externe pour les index de
répertoires.
</description>
<syntax>DirectoryIndexRedirect on | off | permanent | temp | seeother |
<var>3xx-code</var>
</syntax>
<default>DirectoryIndexRedirect off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<compatibility>Disponible depuis la version 2.3.14</compatibility>
<usage>
<p>Par défaut, c'est la page définie par la directive
<directive>DirectoryIndex</directive> qui est sélectionnée et
renvoyée de manière transparente au client. La directive
<directive>DirectoryIndexRedirect</directive> permet de rediriger le
client via une redirection de type 3xx.</p>
<p>Les arguments acceptés sont :</p>
<ul>
<li><code>on</code> : envoie une redirection 302 vers l'index choisi.</li>
<li><code>off</code> : n'envoie aucune redirection. Il s'agit du comportement historique de mod_dir.</li>
<li><code>permanent</code> : envoie une redirection 301 (permanent) vers l'index choisi.</li>
<li><code>temp</code> : ceci est équivalent à <code>on</code></li>
<li><code>seeother</code> : envoie une redirection 303 (également appelée "See Other") vers l'index choisi.</li>
<li><var>3xx-code</var> : envoie une redirection accompagnée du code 3xx choisi.</li>
</ul>
<example><title>Exemple</title>
<highlight language="config">
DirectoryIndexRedirect on
</highlight>
</example>
<p>Une requête pour <code>http://example.com/docs/</code> se
solderait par une redirection temporaire vers
<code>http://example.com/docs/index.html</code> si cette ressource
existe.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DirectorySlash</name>
<description>Activation/Désactivation de la redirection "slash de
fin"</description>
<syntax>DirectorySlash On|Off</syntax>
<default>DirectorySlash On</default>
<contextlist><context>server config</context><context>virtual
host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<usage>
<p>La directive <directive>DirectorySlash</directive> permet de
déterminer si <module>mod_dir</module> doit corriger ou non les URLs
pointant vers un répertoire.</p>
<p>En général, si un utilisateur envoie une requête pour une
ressource sans slash de fin, cette ressource représentant un
répertoire, <module>mod_dir</module> le redirige vers la même
ressource, mais <em>en ajoutant</em> un slash de fin, et ceci pour
plusieurs bonnes raisons :</p>
<ul>
<li>La requête de l'utilisateur contiendra finalement l'URL
canonique de la ressource</li>
<li><module>mod_autoindex</module> fonctionnera correctement. Comme
il n'indique pas le chemin dans le lien, le chemin de l'URL serait
incorrect.</li>
<li>La directive <directive
module="mod_dir">DirectoryIndex</directive> n'est évaluée
<em>que</em> pour les répertoires se terminant par un slash.</li>
<li>Les références à des URLs relatives dans les pages html
fonctionneront alors correctement.</li>
</ul>
<p>Si vous ne souhaitez pas voir ces effets, <em>et</em> si
les raisons évoquées ci-dessus ne s'appliquent pas à vous, vous
pouvez désactiver la redirection comme indiqué ci-dessous.
Gardez cependant à l'esprit que ceci peut avoir des répercutions en
matière de sécurité.</p>
<highlight language="config">
# voir l'avertissement de sécurité ci-dessous !
<Location /some/path>
DirectorySlash Off
SetHandler some-handler
</Location>
</highlight>
<note type="warning"><title>Avertissement de sécurité</title>
<p>La désactivation de la redirection "slash de fin" peut entraîner
la divulgation d'informations. Considérons la situation où
<module>mod_autoindex</module> est actif (<code>Options
+Indexes</code>), où la directive <directive module="mod_dir"
>DirectoryIndex</directive> a pour valeur une ressource valide (par
exemple <code>index.html</code>), et où aucun gestionnaire
particulier n'a été défini pour cette URL. Dans ce cas, une requête
avec slash de fin afficherait le contenu du fichier
<code>index.html</code> ; <strong>par contre, une requête sans slash
de fin afficherait un listing du contenu du
répertoire</strong>.</p>
</note>
<p>Notez aussi que certains navigateurs peuvent modifier par erreur
des requêtes POST en requêtes GET lors d'une redirection, les
données POST étant alors perdues.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FallbackResource</name>
<description>Définit une URL par défaut pour les requêtes qui ne ciblent
aucun fichier</description>
<syntax>FallbackResource disabled | <var>url-locale</var></syntax>
<default>Désactivé - httpd renvoie un code d'erreur 404 (Not Found)</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<usage>
<p>Cette directive permet de définir un traitement pour toute URL
qui ne correspond à aucune ressource de votre système de fichiers,
et qui provoquerait sans cela l'envoi d'un code d'erreur HTTP 404
(Not Found).
Par exemple</p>
<highlight language="config">
FallbackResource /not-404.php
</highlight>
<p>fait en sorte que les requêtes ne correspondant à aucun fichier
soient traitées par <code>non-404.php</code>, sans affecter les
requêtes pour des fichiers existants.</p>
<p>Il est souvent souhaitable qu'un seul fichier ou ressource traite
toutes les requêtes à destination d'un répertoire
particulier, sauf pour les requêtes qui correspondent à un fichier
ou script existant. On y fait souvent référence sous le terme
'contrôleur frontal'.</p>
<p>Dans les versions plus anciennes de httpd, cet effet nécessitait
en général <module>mod_rewrite</module>, et l'utilisation des tests
conditionnels <code>-f</code> et <code>-d</code> pour vérifier
l'existence des fichiers et répertoires. Maintenant, une seule ligne
de configuration est nécessaire.</p>
<highlight language="config">
FallbackResource /index.php
</highlight>
<p>Les fichiers existants comme des images, des fichiers css, etc...
seront traités normalement.</p>
<p>Utilisez l'argument <code>disabled</code> pour désactiver cette
fonctionnalité si l'héritage d'un répertoire parent n'est pas
souhaité.</p>
<p>Pour un URI intermédiaire tel que
<em>http://example.com/blog/</em>, cet URI intermédiaire doit être
spécifié en tant que <var>url-locale</var> :</p>
<highlight language="config">
<Directory /web/example.com/htdocs/blog>
FallbackResource /blog/index.php
</Directory>
<Directory /web/example.com/htdocs/blog/images>
FallbackResource disabled
</Directory>
</highlight>
</usage>
</directivesynopsis>
</modulesynopsis>
|