<-
Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

Module Apache mod_dir

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

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
Statut:Base
Identificateur de Module:dir_module
Fichier Source:mod_dir.c

Sommaire

L'index d'un répertoire peut provenir de deux sources :

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.

Une redirection "slash de fin" est effectuée lorsque le serveur reçoit une requête pour une URL du style http://nom-serveur/foo/nom-repnom-rep est le nom d'un répertoire. Comme les répertoires nécessitent un slash de fin, mod_dir effectue une redirection vers http://nom-serveur/foo/nom-rep/.

Directives

Traitement des bugs

Voir aussi

top

Directive DirectoryCheckHandler

Description:Définit la réponse de ce module lorsqu'un autre gestionnaire est utilisé
Syntaxe:DirectoryCheckHandler On|Off
Défaut:DirectoryCheckHandler Off
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Surcharges autorisées:Indexes
Statut:Base
Module:mod_dir
Compatibilité:Disponible depuis la version 2.4.8 du serveur HTTP Apache. Les versions antérieures à 2.4 se comportaient implicitement comme si "DirectoryCheckHandler ON" avait été spécifié.

La directive DirectoryCheckHandler permet de faire en sorte que mod_dir recherche un index de répertoire ou ajoute des slashes de fin lorsqu'un autre gestionnaire à été défini pour l'URL considérée. Les gestionnaires peuvent être définis à l'exécution via des directives telles que SetHandler ou par d'autres modules.

Dans les versions antérieures à 2.4, ce module ne modifiait pas son comportement si un autre gestionnaire avait été défini pour l'URL considérée. Ceci permettait de servir des index de répertoires même si une directive SetHandler avait été définie pour un répertoire entier, mais pouvait aussi être à l'origine de conflits avec d'autres modules.

top

Directive DirectoryIndex

Description:Liste des fichiers ressources à rechercher lorsque le client envoie une requête pour un répertoire
Syntaxe:DirectoryIndex disabled | url locale [url locale] ...
Défaut:DirectoryIndex index.html
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Surcharges autorisées:Indexes
Statut:Base
Module:mod_dir

La directive DirectoryIndex 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. url locale 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 Indexes est définie, le serveur générera son propre listing du répertoire.

Exemple

DirectoryIndex index.html

Avec cette configuration, une requête pour l'URL http://example.com/docs/ renverrait au client la ressource http://example.com/docs/index.html si elle existe, ou provoquerait la génération du listing du répertoire si la ressource n'existe pas.

Notez qu'il n'est pas nécessaire que les documents soient relatifs au répertoire ;

DirectoryIndex index.html index.txt  /cgi-bin/index.pl

provoquerait l'exécution du script CGI /cgi-bin/index.pl si aucun des fichiers index.html ou index.txt n'existe dans le répertoire considéré.

La spécification du seul argument "disabled" empêche mod_dir 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".

Note :La définition de plusieurs directives DirectoryIndex au sein d'un même contexte permet d'ajouter des ressources à rechercher plutôt que de remplacer celle déjà définies :

# 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>
top

Directive DirectoryIndexRedirect

Description:Définit une redirection externe pour les index de répertoires.
Syntaxe:DirectoryIndexRedirect on | off | permanent | temp | seeother | 3xx-code
Défaut:DirectoryIndexRedirect off
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Surcharges autorisées:Indexes
Statut:Base
Module:mod_dir
Compatibilité:Disponible depuis la version 2.3.14

Par défaut, c'est la page définie par la directive DirectoryIndex qui est sélectionnée et renvoyée de manière transparente au client. La directive DirectoryIndexRedirect permet de rediriger le client via une redirection de type 3xx.

Les arguments acceptés sont :

Exemple

DirectoryIndexRedirect on

Une requête pour http://example.com/docs/ se solderait par une redirection temporaire vers http://example.com/docs/index.html si cette ressource existe.

top

Directive DirectorySlash

Description:Activation/Désactivation de la redirection "slash de fin"
Syntaxe:DirectorySlash On|Off|NotFound
Défaut:DirectorySlash On
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Surcharges autorisées:Indexes
Statut:Base
Module:mod_dir
Compatibilité:L'argument NotFound est disponible à partir de la version 2.5.1 du serveur HTTP Apache

La directive DirectorySlash permet de déterminer comment mod_dir doit éventuellement corriger les URLs pointant vers un répertoire.

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, mod_dir le redirige vers la même ressource, mais en ajoutant un slash de fin, et ceci pour plusieurs bonnes raisons :

Si vous ne souhaitez pas voir ces effets, et 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é.

# voir l'avertissement de sécurité ci-dessous !
<Location "/some/path">
    DirectorySlash Off
    SetHandler some-handler
</Location>

Avertissement de sécurité

La désactivation de la redirection "slash de fin" peut entraîner la divulgation d'informations. Considérons la situation où mod_autoindex est actif (Options +Indexes), où la directive DirectoryIndex a pour valeur une ressource valide (par exemple index.html), 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 index.html ; par contre, une requête sans slash de fin afficherait un listing du contenu du répertoire.

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.

Pour éviter les risques inhérents à l'option "off" ci-dessus ou pour éviter de divulguer la présence d'un répertoire via l'option "on", on peut utiliser l'argument "NotFound" pour que mod_dir renvoie un code d'état 404 au lieu de rediriger la requête pour inclure un slash de fin.

top

Directive FallbackResource

Description:Définit une URL par défaut pour les requêtes qui ne ciblent aucun fichier
Syntaxe:FallbackResource disabled | url-locale
Défaut:Désactivé - httpd renvoie un code d'erreur 404 (Not Found)
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Surcharges autorisées:Indexes
Statut:Base
Module:mod_dir
Compatibilité:L'argument disabled est disponible depuis la version 2.4.4 du serveur HTTP Apache

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

FallbackResource /not-404.php

fait en sorte que les requêtes ne correspondant à aucun fichier soient traitées par non-404.php, sans affecter les requêtes pour des fichiers existants.

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'.

Dans les versions plus anciennes de httpd, cet effet nécessitait en général mod_rewrite, et l'utilisation des tests conditionnels -f et -d pour vérifier l'existence des fichiers et répertoires. Maintenant, une seule ligne de configuration est nécessaire.

FallbackResource /index.php

Les fichiers existants comme des images, des fichiers css, etc... seront traités normalement.

Utilisez l'argument disabled pour désactiver cette fonctionnalité si l'héritage d'un répertoire parent n'est pas souhaité.

Pour un URI intermédiaire tel que http://example.com/blog/, cet URI intermédiaire doit être spécifié en tant que url-locale :

<Directory "/web/example.com/htdocs/blog">
    FallbackResource /blog/index.php
</Directory>
<Directory "/web/example.com/htdocs/blog/images">
    FallbackResource disabled
</Directory>

Un gestionnaire de ressource par défaut (dans l'exemple ci-dessus /blog/index.php) peut accéder à l'URL de la requête originale via la variable de serveur REQUEST_URI. Pour accéder à cette variable en PHP, par exemple, utilisez $_SERVER['REQUEST_URI'].

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

top

Commentaires

Notice:
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 mailing lists.