Tuning Apache les doigts dans les plumes
lundi 5 juillet 2004 | Webdesign
Fatigué de voir un autoindex aussi émouvant qu'une affiche de recrutement pour kolkhoze soviétique ? Ce module peut être customizé par quelques pirouettes, au même titre que les pages d'erreur 404 avec les instructions ErrorDocument 404 qu'on retrouve dans httpd.conf ou les .htaccess.
C'est le moment de voler dans les plumes du module autoindex, qui génère les listes si bien connues de fichiers lorsqu'aucune page par défaut attendue par DirectoryIndex n'est présente dans le répertoire (attention c'est une faille de sécurité si le listing donne accès à des informations trop sensibles). Voici donc une apparence "par défaut" de la page produite :
Ô ami à plumes, tu as tout prévu, ou presque. Triturons httpd.conf aux alentours de la section <IfModule mod_autoindex.c> et commencons notre exubération salvadordalienne...
IndexOptions FancyIndexing
L'instruction IndexOptions est intéressante. Quelques modifications peuvent être apportées. Je dis bien quelques, parce qu'il faudra ruser pour vraiment obtenir un résultat regardable. Prenons par exemple :
IndexOptions FancyIndexing SuppressHTMLPreamble SuppressLastModified SuppressDescription FoldersFirst NameWidth=* SuppressColumnSorting
Description détaillée de ces quelques doux mots poétiques :
- SuppressHTMLPreamble : Supprime le préambule HTML (<html>...<body>) inclus automatiquement dans les pages. Utile pour apporter une touche perso par la suite à ce bout de code.
- SuppressLastModified : Supprime la colonne Dernière modification.
- SuppressDescription : Supprime la colonne Description.
- FoldersFirst : Classe les dossiers en premier dans la liste.
- NameWidth=*|n : Fixe la largeur de la colonne de nom de fichier. Si un nombre est spécifié (n) les noms seront tronqués (comme par défaut) à cette valeur. Avec une astérisque, l'ajustement est automatique au nom le plus long.
- SuppressColumnSorting : Désactive le lien sur les titres de colonnes, permettant à l'origine de classer par date, nom de fichier, etc...
C'est alors que vient le point le plus intéressant, qui va permettre d'ajouter son propre préambule aux pages, et son... suffixambule. Grâce aux options ReadmeName et HeaderName :
ReadmeName /README
HeaderName /HEADER
A l'origine il s'agissait surtout de fournir un header personnalisé aux pages, et ajouter un readme en bas du listing. Dans l'exemple ci-dessus, le préambule sera le fichier HEADER situé à la racine du serveur (DocumentRoot). Par définition, ce sera par défaut un fichier HEADER.html, le choix se faisant automatiquement. Il est possible de définir n'importe quel chemin précis, relatif ou absolu. ReadmeName agit exactement de la même façon en ajoutant le contenu du fichier README (.html ou non) à chaque bas de page. Voilà de quoi personnaliser le tout avec du style.
Exemple de fichier HEADER.html, tout ce qu'il y a de plus classique :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>da ounage autoindex</title>
<style type="text/css">
...
</style>
</head>
<body>
Exemple de fichier README.html, tout ce qu'il y a de plus classique :
</body>
</html>
Il est bien sûr possible d'utiliser des scripts PHP ou CGI en tant que fichiers HEADER et README.
Plus d'infos et d'options dans la doc mod_autoindex.