Directory-Listings des Apache anpassen (FancyIndexing)

In diesem kleinen Tutorial will ich kurz aufzeigen, wie man die automatisch generierten DirectoryListings des Apache Webservers seinen persönlichen Wünschen anpassen kann und sie so etwas freundlicher gestalltet. Ich setzte an dieser Stelle vorraus, dass ein grundlegendes Wissen über .htaccess Dateien, um was für Datein es sich handelt und wie sie funktionieren, vorhanden ist.

Grundlagen

Grund Voraussetzung, dass die hier beschriebene Technik funktioniert, ist, dass das DirectoryListing aktiviert ist. Dies kann man entweder im Controlpanel seines Webspaces einstellen oder man gibt in der .htacces Datei als erstes die Option:

Options +Indexes

an. Allgemein kann man sich merken, dass ein "+" eine Option aktiviert und ein "-" eine Option deaktiviert.

Weitere Optionen für Options:

ParameterBedeutung
ExecCGISteuert das ausführen von CGI-Skripten in dem betreffenden Verzeichnis.
IncludesSteuert das parsen von Server-Sided-Includes [SSI].
IncludesNOEXECSteuert, ob Include-Dateien CGI-Skripte ausführen dürfen. Wirkt sich entsprechend auf die #exec- und #include-Tags aus
IndexesSteuert, ob der Server einen Verzeichnis Inhalt zurückliefern soll, wenn keine Index-Datei gefunden wurde oder nicht.

Desweiteren muss in der .htacces-Datei mit

IndexOptions FancyIndexing

das FancyIndexing eingeschaltet werden.

Kommen wir nun zu dem eigentlich interessanten:

Aussehen der Verzeichnistabelle anpassen

Gesteuert wird das grundsätzliche Aussehen des DirectoryListings mit dem Schalter: IndexOptions. Die möglichen und gewünschten Optionen werden dahinter einfach angegeben:

ParameterBedeutung
IconHeight=[Wert in Pixel]Höhe des Icons in Pixel.
IconWidth=[Wert in Pixel]Breite des Icons in Pixel.
IconsAreLinksBestimmt, ob die Icons Links sind. Allerdings haben sie dann immer eine Rand, was eventuell nicht so schön aussieht.
NameWidth=[n*]Breite der Spalte Name in Zeichen. Ein "* " setzt die Breite auf den längsten Dateinamen.
ScanHTMLTitlesIst diese Optiion angegeben, wird der Titel der HTML-Datei dazu benutzt, um eine Beschreibung zu generieren.
SuppressColumnSortingDie Spalten können nicht sortiert werden.
SuppressDescriptionDie Spalte "Beschreibung" wird unterdrückt.
SuppressLastModifiedDie Spalte "Letzte Änderung" wird unterdrückt.
SuppressSizeDie Spalte "Dateigröße" wird unterdrückt.
SuppressHTMLPreambleUnterdrückt die Erzeugung des HTML-Headers einer HTML-Datei. Sollte man machen, wenn man einen extra Header angibt.
FoldersFirstOrdner werden als erstes aufgelistet.
ShowHiddenZeigt auch passwortgeschützte Dateien an.
HTMLTableSetzt das DirectoryListing in eine formatierte HTML Tabelle, die man dann weiter mit Hilfe eines Stylesheets formatieren kann.

Eine typische Anweisung in einer .htaccess-Datei könnte jetzt so aussehen:

IndexOptions NameWidth=30 DescriptionWidth=450 IconHeight=16 IconWidth=16
    SuppressHTMLPreamble FoldersFirst ScanHTMLTitles

Damit hätten wir schon mal das generelle aussehen der Tabelle bestimmt. Kommen wir nun zu den Icon, die dargestellt werden:

Eigene Icons für die Dateitypen

Der Apache nimmt für jeden Dateityp ein passendes Icon. Nur leider sehen diese etwas "unschön" aus. Dies wollen wir ändern. Mit der Option AddIcon können wir einem Dateitypen ein Icon zuweisen. Wir haben dabei die Möglichkeit Wildcards, wie wir sie schon von DOS kennen, zu benutzen. Folgende Zeile weist dem Dateityp *.html das mit dem Pfad angegebene Bildchen zu:

AddIcon /pics/html.png *.html *.shtml

Wie man sehen kann, kann man auch mehrere Dateitypen angeben durch ein Leerzeichen getrennt. Mit der Option DefaultIcon kann für alle restlichen Dateitypen ein Icon bestimmt werden.

Gehen wir gleich noch einen Schritt weiter. Laut dem W3C sollte jede Grafik auch einen alternativen Text anzeigen. Auch diese Möglichkeit bietet uns FancyIndexing. Mit der Option AddAlt kann jedem Icon neben einem Dateinamen ein alternativer Text zugewiesen werden. Dabei muss der Text in Hochkommas und der Dateityp angegeben werden:

AddAlt "Webseite" html shtml

Fährt man nun mit der Maus über das Icon vor einem Dateinamen wird die Beschreibung in einem kleinen Hinweisfensterchen angezeigt.

Bleiben noch zwei Sonderfälle. Der erste wäre ein Icon für ein Verzeichnis. Jetzt könnte man bei AddIcon jeden Ordner einzel angeben, was allerdings etwas mühsam wäre. Gibt man statt dessen ^^DIRECTORY^^ als Dateityp an, wird jedem Odner mit dem angegebenen Icon angezeigt.

AddIcon /pics/folder.png ^^DIRECTORY^^

Dann gibt es da noch das unsichtbare Icon am Anfang des Tabellenkopfes. Es dient als Platzhalter damit die Ausrichtung der Tabellenspalten stimmt. Dieses können wir mit der Angabe ^^BLANKICON^^ ändern.

Beschreibungen für Dateien und Ordner angeben

Die Vorgehensweise ist ähnlich wie die Angabe eines alternativen Textes bei den Dateitypen, nur dass die Angabe AddDescription benutzt wird. In den Hochkommas steht die Beschreibung und anschließend die Datei oder Ordner. Auch hier sind wieder Wildcards und die angabe mehrer Dateien erlaubt.

AddDescription "Support-Forum" forum

Es ist nicht möglich innerhalb der Beschreibung mit weiteren HTML-Tags wie Tags für Links oder Grafiken zu arbeiten.

Dateien für den Header und Footer

Man kann auch über und unter dem DirectoyListing eigene HTML-Dateien anzeigen lassen wenn einem der standard Text vom Apache nicht gefällt. Verantwortlich dafür sind die Einstellungen: HeaderName und ReadmeName

HeaderName /data/head.html
ReadmeName /data/foot.html

Hier wird über dem DirectoryListing die Datei head.html und unter dem Listing die Datei foot.html angezeigt. Es kann sich dabei auch um shtml-Dateien handel mit zusätzlichen Includes. Hier kommt ist es jetzt auch wichtig bei den IndexOptions SuppressHTMLPreamble anzugegeben, um eine gültige HTML-Datei vom Server geliefert zu bekommen.

Dateien und Ordner ausblenden

Hat man das DirectoryListing aktiviert ist es eventuell unerwünscht, dass ein Besucher bestimmte Dateien und Ordner sieht, um nicht in Verlegenheit zu kommen diese einzusehen. FancyIndexing biete da die Möglichkeit diese Ordner und Dateien auszublenden beim DirectoryListing. Folgende Angabe:

IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.png

blendet die Verzeichnisse "cgi-bin", "error", "includes", "pics" und "programnme" und die Dateien mit der Endung "php" und "ico" aus.

Sonstige Anmerkungen

Sollte der Server beim Aufruf der Seite einen Internen Serverfehler melden, ist dies kein Grund zur Verzweiflung. Meist handel es sich um einen Tippfehler bei den Anweisungen in der .htaccess Datei. Im Gegensatz zu Browsern, die einfach fehlerhafte HTML-Tags auf Seiten ignorieren, nimmt es einem der Apache etwas übel, wenn man da einen Fehler macht.

Die Einstellungen die man in einer .htaccess Datei macht gelten für den Ordner in dem sie liegt und alle Unterordner. Es sei denn in einem Unterordner liegt eine weitere .htaccess Datei, die die Einstellungen überschreibt.

Man kann zwar mit IndexIgnor verhindern, dass bestimmte Ordner angezeigt werden, das hindert aber niemanden daran, trotzdem dorthin zu navigieren, wenn er Kenntnis von diesen Ordner hat. Deswegen sollte man in Ordner, in denen Niemand etwas verloren hat eine .htaccess Datei mit folgendem Inhalt legen:

DirectoryIndex /..

Die Option DirectoryIndex gibt das Verzeichnis an, in dem die Index-Datei zu finden ist, wenn in dem entsprechenden Verzeichnis keine gefunden wird.

Links

2011-03-17T00:42:30 +0100, mail@michael-puff.de