Tuning Apache les doigts dans les plumes

Yakari et Apache

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 :

Apache Autoindex

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

Apache Autoindex

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.

Apache

Plus d'infos et d'options dans la doc mod_autoindex.

16 commentaires pour “Tuning Apache les doigts dans les plumes”

  1. Astikoo dit :

    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

  2. Astikoo dit :

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

  3. Yorunokoe dit :

    Vraiment merci à toi Dew pour les explications et à toi Astikoo pour le PHP, j’étais pas près de trouver !

  4. fred dit :

    tiens alors ca !
    moi c’est axactement pareil que Astikoo !
    merci par avance !
    A bientot.

  5. math dit :

    merci pour l’explication

  6. tom dit :

    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

  7. tom dit :

    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. Kablumy dit :

    Merci pour cet artile très bien expliqué.

  9. user dit :

    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.

  10. Anonymous dit :

    Salut,
    Merci pour cette article, mais il y a une petite erreur qu’il faudrais corriger en:
    NameWidth=n|*

  11. sundvold dit :

    une seule ligne supplémentaire (n’importe laquelle) et mon serveur ne veux plus redémarrer

  12. Anne dit :

    Bonjour, je voudrais une simple précision, j’utilise les page perso de Free, comment accéder au httpd.conf ???

    Cordialement,

  13. somebody dit :

    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

  14. Fabien dit :

    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.

  15. Laurent dit :

    Tu as mal mis le liens vers ton css, si il est à la racine met bien /style.css par exemple

  16. Laurent dit :

    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?

Laisser un commentaire