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.
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:
| Parameter | Bedeutung |
|---|---|
| ExecCGI | Steuert das ausführen von CGI-Skripten in dem betreffenden Verzeichnis. |
| Includes | Steuert das parsen von Server-Sided-Includes [SSI]. |
| IncludesNOEXEC | Steuert, ob Include-Dateien CGI-Skripte ausführen dürfen. Wirkt sich entsprechend auf die #exec- und #include-Tags aus |
| Indexes | Steuert, ob der Server einen Verzeichnis Inhalt zurückliefern soll, wenn keine Index-Datei gefunden wurde oder nicht. |
Desweiteren muss in der .htacces-Datei mit
FancyIndexing On
das FancyIndexing eingeschaltet werden.
Kommen wir nun zu dem eigentlich interessanten:
Gesteuert wird das grundsätzliche Aussehen des DirectoryListings mit dem Schalter: IndexOptions. Die möglichen und gewünschten Optionen werden dahinter einfach angegeben:
| Parameter | Bedeutung |
|---|---|
| IconHeight=[Wert in Pixel] | Höhe des Icons in Pixel. |
| IconWidth=[Wert in Pixel] | Breite des Icons in Pixel. |
| IconsAreLinks | Bestimmt, 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. |
| ScanHTMLTitles | Ist diese Optiion angegeben, wird der Titel der HTML-Datei dazu benutzt, um eine Beschreibung zu generieren. |
| SuppressColumnSorting | Die Spalten können nicht sortiert werden. |
| SuppressDescription | Die Spalte "Beschreibung" wird unterdrückt. |
| SuppressLastModified | Die Spalte "Letzte Änderung" wird unterdrückt. |
| SuppressSize | Die Spalte "Dateigröße" wird unterdrückt. |
| SuppressHTMLPreamble | Unterdrückt die Erzeugung des HTML-Headers einer HTML-Datei. Sollte man machen, wenn man einen extra Header angibt. |
| FoldersFirst | Ordner werden als erstes aufgelistet. |
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:
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.
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.
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.
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.
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. Deswgen 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.
Weiterführende Links:
HTACCESS [1]
Die Dokumentation zu Apache, englisch [2]
[1] http://www.trash.net/faq/htaccess.shtml
[2] http://httpd.apache.org/docs