Directive Apache : La directive Options

Temps de lecture: 4 minutes

Description de la directive Options

La directive Options pour qui a déjà créé un virtual host est omniprésente, mais peu de gens savent à quoi cela correspond vraiment, car on fait souvent du copier coller.

Voyons à quoi ressemble un fichier de configuration d’un hôte virtuel déjà

<VirtualHost 127.0.0.1:80>
DocumentRoot "C:/wamp/www/encre/"
<Directory "C:/wamp/www/encre/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
ServerName encre
ServerAlias encre
ErrorLog "C:/wamp/logs/error.log"
CustomLog "C:/wamp/logs/access.log" common
</VirtualHost>

Selon la documentation officielle, cette directive permet de décrire les fonctionnalités de serveur disponibles pour un répertoire donnée. Dans le script ci-dessus, la directive est dans le tag Directory, jusque là tout va bien. Donc elle définit ce qui est disponible dans le répertoire encre qui est en fait la racine du site web, donc pour tout le site web. Comment par étudier l’option la plus souvent vue FollowSymlinks.

FollowSymlinks

Littéralement suivre le lien symbolique, c’est nécessaire lorsque vous réécrivez les urls pour les rendre plus jolies.

Indexes

Imaginez que vous vous baladiez dans les répertoires de votre site web via le navigateur, vous avez sans doute déjà eu affaire à un listing de fichiers d’un répertoire, en effet en l’absence d’un fichier index.html ou index.php (et de la directive DirectoryIndex), vous pouvez voir le contenu d’un répertoire ! Le remède étant de mettre un fichier index dans ce répertoire, comme ça les fichiers sont invisible ! à moins de connaitre le nom exact du fichier, vous ne verrez rien. Notez que c’est le module mod_autoindex d’Apache qui va lister les fichiers.

Observons plus en profondeur ceci.Pour masquer les fichiers il faut qu’il y ait une directive DirectoryIndex, sous WAMP c’est dans httpd.conf que c’est défini :

<IfModule dir_module>
    DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>

Enlevons maintenant les index HTML

<IfModule dir_module>
    DirectoryIndex index.php index.php3 
</IfModule>

Maintenant allons dans notre répertoire encre, et mettons deux fichiers toto.txt et index.html

Allons sur le site à l’adresse http://encre

Là on voit tout, car DirectoryIndex ne concerne pas les fichier index.html. Changeons maintenant en :

<IfModule dir_module>
    DirectoryIndex index.php index.php3 toto.txt
</IfModule>

Allez sur le site, un page blanche s’affiche ou avec le contenu du fichier toto.txt. Vous avez donc vu qu’il suffit qu’il y ait un fichier désigné par DirectoryIndex pour masquer tout le contenu.

Je vous ai dit aussi que c’est grâce au module autoindex_module que l’on peut voir le contenu du répertoire. Allez dans la fenêtre CMD de Windows et allez dans le répertoire d’Apache et tapez la commande suivante :

httpd -M

Loaded Modules:
 core_module (static)
 win32_module (static)
 mpm_winnt_module (static)
 http_module (static)
 so_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 asis_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 file_cache_module (shared)
 filter_module (shared)
 include_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 log_forensic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 vhost_alias_module (shared)
 php5_module (shared)

Que se passe-t-il si nous désactivons ce module? Allons-y! Il y a une ligne dans le httpd.conf à décommenter pour ne pas le charger

#LoadModule autoindex_module modules/mod_autoindex.so

Décommentez en mettant un # devant. Redémarrez tous les services, si l’icone reste rouge ou orange, c’est qu’il y a eu une erreur au redémarrage d’Apache dans ce cas précis. Pour savoir à quelle ligne le problème se trouve, toujours dans votre console DOs, tapez par exemple une instruction httpd -M, un message d’erreur sortira assez explicite.

Maintenant rechargez votre page web vous devriez voir ceci :

Au moins là pas de soucis, on ne verra rien!

Multiviews

Celle là on la voit out le temps aussi, et semble mystérieuse, ça parle de contenu négocié et de vue multiple. Mais qu’est-ce qu’un contenu négocié? Un site web peut être en plusieurs langue, fançais ou anglais? Avez vous déjà vu les paramètres de votre navigateur dans les préférences de langues? Pour Firefox allez dans Options > Général et langues puis Choisir:

Il y a fort longtemps, je paramétrais la priorité, parfois je voulais l’anglais donc je le plaçais en premier. D’ailleurs si vous chargez un epage web en regardant avec l’outil de développement web de Chrome ou Firefox, vous verrez dans les en-têtes une ligne Accept Language

Vous voyez aussi un coefficient de pondération. Multiviews déporte ce travail de sélection vers le serveur Apache. Pour vous décrire l’effet de Multiviews, je cite la documentation officielle:

L’effet de MultiViews est le suivant : si le serveur reçoit une requête pour /tel/répertoire/foo, si MultiViews est activée pour /tel/répertoire, et si /tel/répertoire/foo n’existe pas, le serveur parcourt le répertoire à la recherche de fichiers nommés foo.*, et simule littéralement une correspondance de types (type map) qui liste tous ces fichiers, en leur associant les mêmes types de média et encodages de contenu qu’ils auraient eu si le client avait demandé l’accès à l’un d’entre eux par son nom. Il choisit ensuite ce qui correspond le mieux aux besoins du client.