Apache - fancyindexing

Problem

Es soll er­reicht werden, dass der Apache Web­ser­ver (hier auf Debian Bus­ter) die Ver­zeich­nis­inhal­te be­stimm­ter Ord­ner/ aller Ord­ner an­zeigt.
Hin­ter­grund ist, dass die be­tref­fen­den Ver­zeich­nis­se ei­nes Win­dows Da­tei­ser­vers in das Ver­zeich­nis des Apache ge­moun­tet sind (an­de­re An­lei­tung). An­wen­der­in­nen und An­wen­der der Win­dows-Um­ge­bung ha­ben Än­de­rungs­recht für die Ord­ner auf dem Da­tei­ser­ver. Die­se Än­de­run­gen sollen dann im­mer auch im In­tra­net sicht­bar sein.
Natürlich kann man die Dateien auch le­dig­lich in das be­tref­fen­de Ver­zeich­nis des Apache ko­pie­ren und die Ak­tion sich mit dem Moun­ten spa­ren.
Ei­ne au­to­ma­tische Syn­chro­ni­sa­tion mit rsync (andere An­lei­tung) ist auch vor­stell­bar.

Durchführung Variante 1

In die­sem Bei­spiel ist der Apache ins­tal­liert und die ge­sam­te Web­site läuft. Sie ist in html sta­tisch er­stellt. Die Da­tei­en für die Web­site lie­gen aus der Sicht des Ser­vers in die­sem Ord­ner

/var/www/html

Da­rin be­fin­den sind die wei­ter­en Da­tei­en und Ver­zeich­nis­se

Datei .htaccess
Datei index.html
Datei 404.html
Ordner css
Ordner de
Ordner icons
Ordner pics
Ordner scripts
Ordner videos

/etc/apache2/apache2.conf

Bearbeitet wird die Datei

/etc/apache2/apache2.conf

In die­sem Bei­spiel wird an­ge­nom­men, dass fancyindexing für alle Ver­zeic­hnis­se ge­nutzt wer­den soll. Darum wird fancyindexing ab der Ebene '/var/www/' ak­ti­viert. Da­zu er­fol­gen die Ein­tr­äge unter 'Directory /var/www/'.
Der Platz für Datei­na­men ist auf 80 Zei­chen ein­ge­stellt.
IndexIgnore mar­kiert, dass die Ein­trä­ge da­nach/ be­stimme Da­tei­typen nicht an­ge­zeigt wer­den sol­len. Die Lis­te kann er­wei­tert wer­den.

Die­se Ein­stel­lung er­laubt dann das Durch­suchen aller Un­ter­or­dner. Will man auf ein­fache Art ver­hin­dern, dass die In­hal­te ei­nes Ord­ners an­ge­zeigt we­rden, spei­chert man in dem be­tref­fen­den Ord­ner eine leere Da­tei mit dem Na­men 'index.html'. Wenn dann je­mand weiß, dass es den bet­ref­fen­den Ord­ner gibt und da­hin n­avi­giert, wird ei­ne leere Sei­te an­ge­zeigt.

Inhalt (Aus­zug)

<Directory />
	Options FollowSymLinks
	AllowOverride None
	Require all denied
</Directory>

<Directory /usr/share>
	AllowOverride None
	Require all granted
</Directory>

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
IndexOptions FancyIndexing
IndexOptions NameWidth=80 DescriptionWidth=450 IconHeight=16 IconWidth=16 SuppressHTMLPreamble FoldersFirst ScanHTMLTitles
IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.db
</Directory>

Än­derun­gen wirk­sam wer­den las­sen

# service apache2 reload

Durch­füh­rung Va­ri­an­te 2

Die An­sicht ist zwar auf­ge­hübscht und es gibt mehr Platz für die Da­tei­na­men. Je­doch ist das ge­wohn­te Lay­out der Web­site weg, das über die CSS-Da­tei zu­ge­steu­ert wird.

Da­mit das Lay­out an­ge­wen­det wird, müs­sen zwei Da­tei­en erstellt wer­den, eine für den Kopf­be­reich, die auch die CSS-Ein­stel­lun­gen en­thält und ei­ne für den Fuß­be­reich, auf die wer­den die CSS-Ein­stel­lun­gen der ers­ten Da­tei dann über­nom­men.

Die Konfigurationsdatei wird dann leicht geändert. Der Pfad zu den Dateien für Kopf- und Fußzeile wird eingetragen.

Inhalt (Auszug)

<Directory />
	Options FollowSymLinks
	AllowOverride None
	Require all denied
</Directory>

<Directory /usr/share>
	AllowOverride None
	Require all granted
</Directory>

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
IndexOptions FancyIndexing
IndexOptions NameWidth=80 DescriptionWidth=450 IconHeight=16 IconWidth=16 SuppressHTMLPreamble FoldersFirst ScanHTMLTitles
HeaderName ../de/headline-de-listing.html
ReadmeName ../de/footer-de-listing.html
IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.db
</Directory>

Diese bei­den Da­tei­en müs­sen na­tür­lich auf dem System vor­han­den sein/ noch ein­ge­rich­tet wer­den.

Für Ord­ner die in die­sem Bei­spiel aus der Sicht des Ser­vers auf die­ser Ebene lie­gen, also zum Bei­spiel...

/var/www/download/
/var/www/weitere-dateien/

...ist kein zu­sätz­lich­en Ein­trag in /etc/apache2/apache2.conf und sind kei­ne ge­son­der­ten Kopf- und Fuß­zei­len­da­tei­en er­for­der­lich.

Lei­der ist es so, dass es nicht für Un­­ter­ord­ner funk­tio­niert. Also...

/var/www/download/unterordner
/var/www/weitere-dateien/noch-ein-ordner

...wer­den zwar nach den Ein­ste­llun­gen in /etc/apache2/apache2.conf mit mehr Platz an­ge­zeigt. Da­mit für die­se Un­ter­ord­ner das auf­ge­hübsch­te Layout genutzt wird, muss in '/etc/apache2/apache2.conf' der kom­plet­te Pfad aus Ser­ver­sicht an­ge­ge­ben wer­den. Wei­ter müs­sen die Kopf- und Fuß­zei­len­da­tei mit in dem Ord­ner vor­han­den sein. Das klappt je­doch le­dig­lich bis zu die­ser Ebene. Bei tie­fer lie­gen­den Ver­zeichnis­sen wer­den die Pfad­an­ga­ben ig­no­riert.
Die Pfad­an­ga­be ist also so zu än­dern, dass die in ei­ne an­de­re Ebene ver­weist, in der Kopf- und Fuß­zei­len­da­tei lie­gen, war nicht er­folg­reich.

Also: Kopf- und Fuß­zeilen­da­tei mit ko­pieren und in '/etc/apache2/apache2.conf' Pfad so än­dern, dass auf eben die­sen Ord­ner ver­wie­sen wird. Wenn man mag, kann man den Na­men gleich las­sen und je­weils eine in­di­vi­du­el­le Über­schrift in den Quell­code ein­tra­gen.

Inhalt (Auszug) mit Unterordnern

<Directory />
	Options FollowSymLinks
	AllowOverride None
	Require all denied
</Directory>

<Directory /usr/share>
	AllowOverride None
	Require all granted
</Directory>

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
IndexOptions FancyIndexing
IndexOptions NameWidth=80 DescriptionWidth=450 IconHeight=16 IconWidth=16 SuppressHTMLPreamble FoldersFirst ScanHTMLTitles
HeaderName ../de/headline-de-listing.html
ReadmeName ../de/footer-de-listing.html
IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.db *.htm *.html
</Directory>

<Directory /var/www/download/unterordner/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
IndexOptions FancyIndexing
IndexOptions NameWidth=80 DescriptionWidth=450 IconHeight=16 IconWidth=16 SuppressHTMLPreamble FoldersFirst ScanHTMLTitles
# Kopf- und Fusszeilendatei mit in den Ordner kopieren.
# Also keine weitere Pfadangabe zu diesen Dateien angeben.
# Die sind ja in dem Ordner bei den Dateien, die gelistet werden.
HeaderName headline-de-listing.html
ReadmeName footer-de-listing.html
IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.db *.htm *.html
</Directory>

html-Da­tei­en aus­blen­den

Es ist rat­sam, die html-Da­tei­en im Ord­ner­lis­ting nicht an­zei­gen zu lassen, darum: '*.html'.

In dem spe­ziel­len Fall ist es so, dass ein Win­dows­ord­ner in Li­nux g­emoun­tet ist, der wei­tere Un­ter­ord­ner en­thält (an­de­re An­lei­tung, also Li­nux moun­tet frei­ge­ge­be­ne Win­dows-Ord­ner und zeigt deren In­hal­te nun an). Da wer­den nun lei­der die html-Da­tei­en mit dem Win­dows Da­tei­exp­lo­rer im Win­dows-Ver­zeich­nis an­zeigt, wenn User den Weg mit dem Windows-Da­tei­ex­plo­rer klicken.
Das fan­ge ich so ab, dass die Kopf- und Fuß­zei­len­da­tei im Win­dows-Ver­zeich­nis über das Kon­textme­nü als ver­steck­te Da­tei ma­rkiert sind.

Än­de­run­gen wirksam werden las­sen

# service apache2 reload

Datei für Kopfzeile

<style>
[Hier hinein die Inhalte des HTML-Head und der CSS-Datei kopieren.]
</style>
[Hier den HTML-Quelltext einfügen, der über den gelisteten Dateien 
angezeigt werden soll, eventuell auch eine individuelle Überschrift 
und ein Hinweistest, wie alles funktioniert.
Beispiel:]
Ein Klick auf 'Parent Directory' bringt Sie eine Ebene nach oben
Ein Klick auf 'Home' bringt Sie zur Home-Page / Eingangsseite.

Datei für Fußzeile

[Hier den HTML-Quelltext einfügen.]
[Dieses Beispiel setzt voraus, dass es eine entsprechende
Definition in der CSS-Datei und den Anker 'top' gibt.]
<div class="footer">
  <a title="Zum Seitenanfang / top of page" href="#top">↑↑↑</a> | Domainname |  <a title="Zum Seitenanfang / top of page" href="#top">↑↑↑</a>
</div>

Wenn die Ver­zeich­nis­in­hal­te an­ge­zeigt wer­den, kommt man über einen Klick auf 'parent directory' im­mer eine Ebene hö­her und am Ende dann wie­der zur 'index.html' im Haupt­ver­zeich­nis. Dann wird die 'Home'-Page an­ge­zeigt.

Nachtrag

In dem obigen Bei­spiel werden die Icons ge­nutzt, die der Apache mit­bringt. Dabei zu blei­ben, hat den Vor­teil, dass man an die­ser Stel­le nichts ändern muss, wenn die Web­site mal um­zie­hen sol­lte.

In an­de­ren An­lei­tun­gen ha­be ich ge­le­sen, dass die Ein­stel­lun­gen über ei­ne .htaccess-Da­tei vor­ge­nom­men wer­den. Das hat bei mir mit De­bian nicht ge­klappt.

Der Voll­stän­dig­keit hal­ber gebe ich hier den In­halt wie­der. Dies hier hat un­ter Win­dows 10 und xampp funk­tio­niert. Hier sind auch Pfa­de zu Icons hin­ter­legt, die ge­son­dert be­schafft wer­den müs­sen.

# Verzeichnisinhalte anzeigen
Options +Indexes
IndexOptions FancyIndexing
IndexOptions NameWidth=80 DescriptionWidth=450 IconHeight=16 IconWidth=16 SuppressHTMLPreamble FoldersFirst ScanHTMLTitles
HeaderName ../de/headline-de-listing.html
ReadmeName ../de/footer-de-listing.html
AddIcon ../icons/16px/avi.png *.avi
AddIcon ../icons/16px/bmp.png *.bmp
AddIcon ../icons/16px/csv.png *.csv
AddIcon ../icons/16px/_page.png *.doc *dot
AddIcon ../icons/16px/html.png *.html *.shtml
AddIcon ../icons/16px/jpg.png *.jpg *.jpeg
AddIcon ../icons/16px/odt.png *.odt
AddIcon ../icons/16px/ott.png *.ott
AddIcon ../icons/16px/pdf.png *.pdf
AddIcon ../icons/16px/png.png *.png
AddIcon ../icons/16px/rtf.png *.rtf
AddIcon ../icons/16px/tiff.png *.tif
AddIcon ../icons/16px/txt.png *.txt
AddIcon ../icons/16px/zip.png *.zip
IndexIgnore cgi-bin error includes pics programme css *.php *.ico *.db
# Fehler 404-Meldung
ErrorDocument 404 /404.html

In­sge­samt dau­ert es schon ei­nen Mo­ment, die Struk­tu­ren ein­zu­rich­ten und die Da­tei­en be­reit zu stel­len. Dann hat man ei­ne Struk­tur, die ge­än­derte In­hal­te dy­na­misch an­zeigt, wenn man die Ver­sion mit den ge­moun­te­ten Win­dows­ord­nern nutzt. Da spielt es dann (bei­nahe) kei­ne Rol­le, wo im Netz­werk die Da­tei­en ge­spei­chert sind. Haupt­sache, der Ordner kann ge­moun­tet wer­den. Ver­teilt ge­spei­cher­te In­hal­te las­sen sich so 'na­he bei­ein­an­der' dar­stel­len.

Quellen:
http://michael-puff.de/Programmierung/Artikel/FancyIndexing.shtml
https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html