Server Side Includes

Da spielt man schon einige Jahre mit Webseiten herum und dann lernt man doch wieder etwas Neues dazu: Server Side Includes (SSI). Klar hatte ich die schon mal überflogen, aber nie so wirklich was damit anfangen können, bis ich vor einigen Tagen wieder einmal vor der Frage stand: Muss du immerzu das gleiche Zeugs von einer HTML-Datei in die nächste schaufeln, weil HTML keine include-Mechanik kennt?

Der Tipp kam unverhofft und erst einmal überraschend: Setzt doch SSI ein! Ja, muss man da erstmal was installieren bei meinem Apache? Wie konfiguriert und nutzt man das? Ein Link auf das folgende sehr gut erklärende Tutorial beseitigte alle Hemmschwellen.

Szenario: Also eine HTML-Datei namens 'header.html' soll in eine HTML-Datei namens 'index.html' inkludiert werden. In der 'index.html' wird an die Stelle, wo die Einfügung stattfinden soll, der folgende Text eingetragen:

<!--#include virtual="header.html" -->

Die Apache httpd.conf bzw. .htaccess benötigt in den Options die Erweiterung Includes bzw. +Includes. Und schon kennt der Apache die SSI-Erweiterung. Damit man zwischen Dateien mit und ohne SSI differenzieren kann, könnte man die folgenden beiden Zeilen einsetzen:

AddType text/html .shtml
AddHandler server-parsed .shtml

Bei manchen Apaches heißt es statt server-passed INCLUDES. Als Alternative zur Dateiendung gibt es den XbitHack:

XbitHack on

Setzt man diesen und setzt unter Linux bzw. Unix das Dateirecht 'Ausführen' (chmod +x), dann braucht man keine spezielle Dateiendung, sondern alle HTML-Dateien, die das Ausführungsrecht haben, werden durch den Ausgabefilter gejagt. Das ist praktisch, weil man eine bereits vorhandene Datei-Struktur nicht umbennen muss.

Muss ich noch erwähnen, dass es mehr Einzustellen gibt (Umdefinieren der Start/Stop-Tags) und auch mehr als nur den Datei-Include? Nein, wenn man sieht, dass ein Parser einsetzt wird ähnlich wie PHP, dann kann man sich bereits alles weitere vorstellen. Nützlich sind die Möglichkeiten Variablen zu definiere, Logik einzubauen und auch auf Betriebssystem-Kommandos zuzugreifen.