📁 Lister un rĂ©pertoire Apache avec .htaccess

Ce tutoriel couvre

Introduction

Ce tutoriel vous prĂ©sente les meilleures solutions open source pour afficher un listing professionnel et rĂ©actif de vos rĂ©pertoires Apache. Quack! 🩆

Au lieu d'utiliser des solutions complexes comme h5ai ou Snap2HTML, vous pouvez customiser le comportement natif d'Apache avec un simple fichier .htaccess.

Avantages du fichier .htaccess

Solution 1 : Perishable Press

📖 À propos de Perishable Press

Perishable Press propose une configuration .htaccess complÚte et optimisée pour améliorer les listings par défaut d'Apache avec mod_autoindex.

Site officiel : Perishable Press - Better Default Directory Views

Licence : Libre d'utilisation (public domain / open source)

Avantages : Solution complÚte, iconographie détaillée par type de fichier, descriptions personnalisées, fichiers header/footer inclus

Fichier .htaccess complet

Créez un fichier .htaccess à la racine de votre répertoire avec le contenu suivant :

đŸ’Ÿ Voir le code complet .htaccess (Ă  copier-coller)
# ============================================================================
# STRONG HTACCESS PROTECTION
# ============================================================================
<Files ~ "^.*\.([Hh][Tt][Aa])">
    order allow,deny
    deny from all
</Files>

# ============================================================================
# DIRECTORY CUSTOMIZATION
# ============================================================================
<IfModule mod_autoindex.c>

    # SET INDEX OPTIONS
    IndexOptions IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=* SuppressHTMLPreamble

    # SET DISPLAY ORDER
    IndexOrderDefault Descending Name

    # SPECIFY HEADER FILE
    HeaderName header.html
    
    # SPECIFY FOOTER FILE
    ReadmeName footer.html

    # IGNORE THESE FILES
    IndexIgnore header.html footer.html favicon.ico .htaccess .ftpquota .DS_Store icons *.log *,v *,t .??* *~ *#

    # DEFAULT ICON
    DefaultIcon icons/generic.gif

    # BLANK ICON (Optionnel - commenté par défaut)
    # AddIcon icons/purple.gif ^^BLANKICON^^

    # FOLDER AND PARENT ICONS
    AddIcon icons/grey.gif ^^DIRECTORY^^
    AddIcon icons/green.gif ..

    # SPECIFIC FILE ICONS
    AddIcon icons/blue.gif .txt .pdf .zip .rar .jpg .jpeg .jpe .png .gif .mpg .ico .js .log .doc .css .html
    AddIcon icons/red.gif readme
    AddIcon (MP3,icons/arrow.gif) .mp3

    # CUSTOM IMAGE ICONS
    AddIconByType (IMG,icons/image.gif) image/*

    # GZIP ENCODING ICON
    AddIconByEncoding (CMP,icons/compress.gif) x-compress x-gzip

    # ========================================================================
    # FILE DESCRIPTIONS
    # ========================================================================
    
    AddDescription "<span class='description'>MPEG Layer 3 Format</span>" .mp3
    AddDescription "<span class='description'>GZIP compressed TAR archive</span>" .tgz .tar.gz
    AddDescription "<span class='description'>GZIP compressed archive</span>" .Z .z .gz .zip
    AddDescription "<span class='description'>RAR compressed archive</span>" .rar
    AddDescription "<span class='description'>TAR compressed archive</span>" .tar
    AddDescription "<span class='description'>ZIP compressed archive</span>" .zip 
    AddDescription "<span class='description'>Windows executable file</span>" .exe
    AddDescription "<span class='description'>Common Gateway Interface</span>" .cgi
    AddDescription "<span class='description'>Joint Photographics Experts Group</span>" .jpg .jpeg .jpe
    AddDescription "<span class='description'>Graphic Interchange Format</span>" .gif
    AddDescription "<span class='description'>Portable Network Graphic</span>" .png
    AddDescription "<span class='description'>Vector graphic</span>" .ps .ai .eps
    AddDescription "<span class='description'>Hypertext Markup Language</span>" .html .shtml .htm
    AddDescription "<span class='description'>Cascading Style Sheet</span>" .css
    AddDescription "<span class='description'>DocType Definition</span>" .dtd
    AddDescription "<span class='description'>Extensible Markup Language</span>" .xml
    AddDescription "<span class='description'>Win32 compressed HTML help</span>" .chm
    AddDescription "<span class='description'>Adobe Portable Document Format</span>" .pdf
    AddDescription "<span class='description'>Plain text file</span>" .txt .nfo .faq .readme
    AddDescription "<span class='description'>Unix man page</span>" .man
    AddDescription "<span class='description'>Email data</span>" .eml .mbox
    AddDescription "<span class='description'>Microsoft Word document</span>" .doc
    AddDescription "<span class='description'>PHP: Hypertext Preprocessor script</span>" .php .php3 .php4
    AddDescription "<span class='description'>PHP: Hypertext Preprocessor source code</span>" .phps
    AddDescription "<span class='description'>Javascript</span>" .js
    AddDescription "<span class='description'>Java code</span>" .java
    AddDescription "<span class='description'>Unix shell script</span>" .sh .shar .csh .ksh .command
    AddDescription "<span class='description'>Mac OS X shell script</span>" .command
    AddDescription "<span class='description'>Configuration file</span>" .conf
    AddDescription "<span class='description'>Mac OS X terminal</span>" .term
    AddDescription "<span class='description'>BitTorrent file</span>" .torrent
    AddDescription "<span class='description'>Windows link</span>" .lnk .url

    # DEFAULT DESCRIPTION
    AddDescription "[<span class='description'>unknown item..</span>]" *

</IfModule>
        

Fichier header.html

CrĂ©ez un fichier header.html au mĂȘme niveau que le .htaccess :

📝 Voir le code header.html (à copier-coller)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>📁 Explorateur de Fichiers</title>
    <style type="text/css">
    
    body {
        background: #f5f5f5;
        margin: 30px;
        padding: 0;
        color: #333;
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    }

    h1 {
        font: 2.2em Georgia, serif;
        color: #222;
        margin-bottom: 20px;
    }

    h1 a:hover, h1 a:active {
        text-decoration: none;
    }

    a:link {
        text-decoration: none;
        color: #0066cc;
    }

    a:visited {
        text-decoration: none;
        color: #663399;
    }

    a:hover, a:active {
        text-decoration: underline;
        color: #cc0000;
    }

    pre {
        font: 0.95em/1.6em "Courier New", Courier, monospace;
        margin: 0;
        padding: 10px;
        color: #555;
        background: white;
        border: 1px solid #ddd;
        border-radius: 4px;
        overflow-x: auto;
    }

    pre img {
        display: inline;
        margin-right: 8px;
        vertical-align: middle;
    }

    img {
        border: none;
    }

    hr {
        border: none;
        border-top: 1px solid #ddd;
        margin: 15px 0;
    }

    .description {
        font-style: italic;
        font-size: 85%;
        color: #888;
    }

    </style>
</head>
<body>

<h1>📁 Explorateur de Fichiers</h1>
<p style="color: #666; margin-bottom: 20px;">Naviguez et téléchargez vos fichiers ci-dessous</p>
        

Fichier footer.html

CrĂ©ez un fichier footer.html au mĂȘme niveau que le .htaccess :

📝 Voir le code footer.html (à copier-coller)
<hr>
<pre style="text-align: center; font-size: 0.9em; color: #999;">
    <em>Explorateur de fichiers réactif - Alimenté par Apache</em>
</pre>
<pre style="text-align: center;">
    <a href="/" title="Accueil">🏠 Retour à l'accueil</a> | 
    <a href=".." title="Parent">📂 Dossier parent</a>
</pre>

</body>
</html>
        

Structure des dossiers

/votre-repertoire/
├── .htaccess              ← Fichier de configuration Apache
├── header.html            ← En-tĂȘte personnalisĂ©
├── footer.html            ← Pied de page personnalisĂ©
├── icons/                 ← Dossier avec les icĂŽnes (tĂ©lĂ©chargez depuis Apache)
│   ├── generic.gif
│   ├── grey.gif
│   ├── green.gif
│   ├── blue.gif
│   ├── red.gif
│   └── ...
├── fichier1.pdf
├── fichier2.mp3
├── image.jpg
└── sous-dossier/
    

Solution 2 : Apaxy

📖 À propos d'Apaxy

Apaxy est un thÚme Apache simple et personnalisable pour les listings de répertoires avec icÎnes modernes et styling CSS.

DépÎt GitHub : Apaxy - GitHub

Licence : GPLv3 (GNU General Public License v3) - Libre d'utilisation personnelle et commerciale avec obligations

Ce que la licence GPLv3 permet :

Obligations de la licence GPLv3 :

Avantages : Design moderne, icÎnes SVG/PNG de qualité, configuration simple, excellent support de la responsivité

Installation d'Apaxy

  1. Téléchargez le dépÎt GitHub : https://github.com/AdamWhitcroft/Apaxy
  2. Extrayez les fichiers dans votre répertoire web
  3. Les fichiers principaux sont:
    • .htaccess – Configuration Apache
    • header.html – En-tĂȘte personnalisĂ©
    • footer.html – Pied de page personnalisĂ©
    • theme/ – Dossier contenant CSS et icĂŽnes
  4. AccĂ©dez au rĂ©pertoire via votre navigateur – c'est prĂȘt!

Avantages d'Apaxy vs Perishable Press

Options principales de IndexOptions

Le fichier .htaccess utilise la directive IndexOptions pour contrĂŽler l'apparence et le comportement du listing. Voici les options les plus importantes :

📋 Liste complùte des options IndexOptions
Option Effet
FancyIndexing Active le mode avec icÎnes et colonnes (hautement recommandé)
HTMLTable Utilise un <table> HTML au lieu de <pre> – ESSENTIEL pour la responsivitĂ©
FoldersFirst Affiche les dossiers en premier, puis les fichiers
IconsAreLinks Les icÎnes deviennent cliquables (améliore l'UX)
VersionSort Tri intelligent des versions (v1, v2, v10 au lieu de v1, v10, v2)
IgnoreCase Tri insensible Ă  la casse
SuppressHTMLPreamble Supprime le code HTML auto-gĂ©nĂ©rĂ© (pour utiliser des en-tĂȘtes personnalisĂ©s)
SuppressSize Masque la colonne « taille »
SuppressLastModified Masque la colonne « date de modification »
SuppressDescription Masque la colonne « description »
NameWidth=* La colonne nom s'adapte automatiquement Ă  la largeur disponible
DescriptionWidth=* La colonne description s'adapte automatiquement

Configuration recommandée

IndexOptions IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=* SuppressHTMLPreamble
    

Explication :

Tri et filtrage cÎté client

Apache gĂ©nĂšre automatiquement des en-tĂȘtes de colonnes cliquables qui permettent aux utilisateurs de trier le listing dynamiquement, sans rechargement de page.

ParamĂštres de tri disponibles

Les paramĂštres de URL suivants contrĂŽlent le tri :

📊 Voir tous les paramùtres de tri
ParamĂštre Effet
C=N Tri par nom
C=M Tri par date de modification
C=S Tri par taille
C=D Tri par description
O=A Ordre ascendant (A Ă  Z)
O=D Ordre descendant (Z Ă  A)
F=0 Liste simple (sans icĂŽnes)
F=1 Fancy indexing (avec icĂŽnes)

Exemples d'URLs de tri

Voici des exemples concrets que vous pouvez utiliser ou que les utilisateurs gĂ©nĂ©reront en cliquant sur les en-tĂȘtes :

đŸ’» Voir les exemples de code (Ă  tester)
# Tri par nom (ascendant)
http://exemple.com/fichiers/?C=N;O=A

# Tri par nom (descendant)
http://exemple.com/fichiers/?C=N;O=D

# Tri par taille (fichiers les plus volumineux en premier)
http://exemple.com/fichiers/?C=S;O=D

# Tri par date (plus récents en premier)
http://exemple.com/fichiers/?C=M;O=D

# Tri par date (plus anciens en premier)
http://exemple.com/fichiers/?C=M;O=A

# Tri par description
http://exemple.com/fichiers/?C=D;O=A

# Fancy indexing avec tri par nom
http://exemple.com/fichiers/?C=N;O=A&F=1

# Liste simple (sans icĂŽnes)
http://exemple.com/fichiers/?F=0
        

Comment fonctionne le tri cÎté client?

Quand Apache gĂ©nĂšre le listing, il crĂ©e des en-tĂȘtes de colonne cliquables qui comportent ces paramĂštres. L'utilisateur clique sur le nom de la colonne (Nom, Date, Taille, Description) et Apache rĂ©gĂ©nĂšre le listing avec le tri appliquĂ© – c'est entiĂšrement automatique!

Avantage : Aucun JavaScript requis, fonctionne mĂȘme avec JavaScript dĂ©sactivĂ©.

Récapitulatif et comparaison

CritĂšre .htaccess seul Perishable Press Apaxy
Installation 1 fichier 3-4 fichiers Cloner le dépÎt
Design Basique Professionnel Moderne
Responsivité Bonne (HTMLTable) Excellente Excellente
IcĂŽnes Basiques (GIF) ComplĂštes (GIF) Modernes (SVG/PNG)
Personnalisation Limitée Moyenne Haute (thÚmes)
Descriptions fichiers Supportées ComplÚtes (80+ types) Supportées
Tri dynamique ✅ Oui ✅ Oui ✅ Oui
Dépendances Aucune Aucune Aucune
Licence Apache natif Public domain (GPL-3.0-or-later)
Recommandé pour Débutants Usage professionnel Design moderne

Quelle solution choisir?

💡 Guides de sĂ©lection

Choisir le .htaccess seul si vous :

Choisir Perishable Press si vous :

Choisir Apaxy si vous :

Mise en place – Checklist

Voici les étapes pour mettre en place votre solution :

  1. Créez un dossier dédiée
    mkdir /var/www/html/fichiers
  2. Choisissez votre solution (Perishable Press recommandée pour commencer)
  3. Copiez le fichier .htaccess dans le dossier
    nano .htaccess
    (Collez le contenu complet fourni ci-dessus)
  4. CrĂ©ez header.html et footer.html dans le mĂȘme dossier
  5. Créez un dossier icons/ et ajoutez les icÎnes (téléchargez depuis Apache)
    mkdir icons
  6. Placez vos fichiers Ă  partager dans le dossier
  7. Testez en accédant via navigateur : http://votre-domaine.com/fichiers/
  8. Ajustez le .htaccess et les fichiers HTML selon vos besoins

Dépannage courant

❓ Le listing ne s'affiche pas
❓ Les icînes ne s'affichent pas
❓ Le fichier .htaccess ne s'applique pas
❓ Le header.html ou footer.html ne s'affiche pas

Ressources utiles

Conclusion

Avec un simple fichier .htaccess, vous pouvez transformer un listing Apache basique en explorateur de fichiers professionnel, rĂ©actif et personnalisĂ©. Quack! 🩆

Les avantages principaux :

Prochaines Ă©tapes : Choisissez votre solution prĂ©fĂ©rĂ©e (Perishable Press ou Apaxy), copiez-collez les fichiers fournis ci-dessus, et testez immĂ©diatement – c'est vraiment aussi simple que ça!