Tuning Apache les doigts dans les plumes
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.
11 septembre 2004 à 18:21
Salut,
merci beaucoup pour cet article qui m’a bien aidé dans ma démarche… je suis par contre bloqué pour inclure un fichier php, j’ai bien regardé la doc anglaise et française de Apache mais sans résultat malheureusement.
Si qqn pouvait m’éclairer, ça serait super.
a+,
Thomas
13 septembre 2004 à 13:34
Bon et bien voilà, après qq jours de recherche j’ai trouvé comment mettre du php… mais ce n’est pas ce qui a de plus évident !
Dans le fichier httpd.conf (je suis sous windows) : j’ai mis :
HeaderName /HEADER.shtml
et dans mon fichier HEADER.shtml (qui se trouve à la racine) :
<!–#include virtual="fichier.php"–>
et ça marche….
15 juin 2005 à 02:13
Vraiment merci à toi Dew pour les explications et à toi Astikoo pour le PHP, j’étais pas près de trouver !
21 novembre 2005 à 17:48
tiens alors ca !
moi c’est axactement pareil que Astikoo !
merci par avance !
A bientot.
29 novembre 2005 à 03:59
merci pour l’explication
22 décembre 2005 à 12:59
Super tuto, mais pour ce qui est d’inclure un script php dans le Headername ça ne marche pas :(
Je tourne sur une debian et un apache 1.3.34 si qqn avait une idée ?
Autre tuto : ldbglobe.fried-rice.net/b…
Merci
23 décembre 2005 à 16:32
C’est bon j’ai trouvé.
La directive <!–#include virtual="fichier.php"–> fonctionne mais il faut autoriser l’éxecution SSI d’apache.
Pour cela, il faut charger le module mod_include.so
(LoadModule includes_module /usr/lib/apache/1.3/mod_include.so)
Pour plus d’info : httpd.apache.org/docs/1.3…
Maintenant mon mod_autoidex est jolie, Merci :o)
8 janvier 2007 à 17:27
Merci pour cet artile très bien expliqué.
12 février 2007 à 13:25
Grand merci!
Je ne savais pas comment faire pour retrouver avec Apache2 le listing sympa style Apache 1.
Et puis on ne connait pas tous les modules…
un rajout de IgnoreCase et de VersionSort (sur la ligne IndexOptions) peut être interessante.
(VersionSort a partir d’Apache 2.0a3)
M.
7 mars 2007 à 11:49
Salut,
Merci pour cette article, mais il y a une petite erreur qu’il faudrais corriger en:
NameWidth=n|*
1 avril 2008 à 12:04
une seule ligne supplémentaire (n’importe laquelle) et mon serveur ne veux plus redémarrer
4 août 2008 à 13:18
Bonjour, je voudrais une simple précision, j’utilise les page perso de Free, comment accéder au httpd.conf ???
Cordialement,
26 août 2008 à 15:49
Pour Anne :
il faut utiliser un fichier .htaccess qui va prendre localement le dessus sur la configuration de base founie par free. Bien sur il faut pour cela que free est autorisé les fichiers .htaccess dans leur httpd.conf
13 novembre 2008 à 20:40
Bonsoir à tous.
Tout d’abord je voulais vous féliciter pour ce tuto simple et efficace.
Je voudrais également vous faire part d’un petit soucis que j’ai rencontré en customisant ma page index.
Mon problème est le suivant, j’ai créé un fichier .htaccess puis un header.html, readme.html ainsi qu’un style.css dans le dossier racine…
La modif de personnalisation est prise en compte simplement elle ne s’applique pas au sous dossier, ai-je loupé qqchose?
Merci d’avance.
4 février 2009 à 23:46
Tu as mal mis le liens vers ton css, si il est à la racine met bien /style.css par exemple
5 février 2009 à 02:23
Encore moi, j’ai un petit soucis, je navigue dans mes dossiers correctement, arrivé sur certains dossiers contenant un index.html, je ne peux ouvrir ce dernier, un fichier sans extension se telecharge, ce fichier contient l’index.html.
J’ai tenté de vider carement mon .htaccess ca ne change rien, quelqu’un pourrait m’aider?