Server-Konfiguration für PHP bzw. SSI mit .htaccess

Die folgenden Angaben zeigen, wie man den Apache-Webserver dazu bringt, PHP- oder SSI-Befehle auch in Seiten auszuführen, die die Dateiendigung .html haben.

Dies geschieht, indem man eine Datei namens .htaccess mit den entsprechenden Angaben im betroffenen Verzeichnis (oder im Stammverzeichnis) ablegt.

Das ganze setzt voraus, dass der Server-Betreuer in der zentralen Konfigurations-Datei httpd.conf überhaupt zulässt, dass der Benutzer für sein eigenes Verzeichnis gewisse Einstellungen in der .htaccess-Datei verändern kann (AllowOverride-Direktive). Wenn man eine .htaccess-Datei in ein Verzeichnis hochlädt und der Server danach eine "Internal Server Error" Meldung ausgibt, kann es daran liegen, dass man versucht, mit der .htaccess-Datei gewisse Dinge einzustellen, die der Server-Betreuer nicht erlaubt hat. Durch zeilenweises Löschen (oder Auskommentieren mit #) kann man versuchen, die betreffende(n) Zeile(n) in der .htaccess-Datei zu finden.

Standard-Einstellungen

Die grundsätzlichen Einstellungen sind meist die folgenden:

Dateiendigung Server-Verhalten
.html Die Datei wird unverändert an den Browser geschickt
.shtml Die Datei wird "geparst" (d.h. SSI-Befehle in der Datei werden interpretiert) und dann an den Browser geschickt
.php Die Datei wird "geparst" (d.h. PHP-Befehle in der Datei werden interpretiert) und dann an den Browser geschickt

PHP-Befehle in .html-Seiten

Problem: Wie erreicht man, dass PHP-Befehle auch in Seiten mit der Dateiendigung .html interpretiert werden?

Lösung: Man schreibt eine Datei mit dem Namen .htaccess und dem folgenden Inhalt:

AddType application/x-httpd-php .html
AddType application/x-httpd-php .htm

Diese Zeilen sagen dem Webserver: "Alle Dateien mit der Endigung .html oder .htm müssen zuerst vom PHP-Programm bearbeitet werden, bevor sie an den Browser weitergeschickt werden."

Man kann es auch auf einer Zeile zusammenfassen:

AddType application/x-httpd-php .html .htm

Mit neueren Versionen von PHP bzw. Apache muss die Zeile so aussehen:

AddHandler application/x-httpd-php .html .htm

Diese Datei .htaccess speichert man am besten im Stammverzeichnis des Webservers (z.B. public_html) oder des eigenen Projekts (z.B. /benutzername/).

Die Angaben in .htaccess betreffen das Verzeichnis und sämtliche Unterverzeichnisse, sofern in diesen nicht explizit etwas anderes definiert wird.

Der (kleine) Nachteil dieser Methode: Es werden sämtliche .html-Dateien eines Verzeichnisses auf PHP geparst, egal, ob sie PHP-Befehle enthalten oder nicht. Das bewirkt eventuell eine minimale Verzögerung, bevor die Dateien an den Browser geschickt werden. Es hat jedoch den Vorteil, dass Dateien mit der Endigung .html auch bei lokaler Betrachtung in allen Browsern problemlos angezeigt werden (im Gegensatz zu .php-Dateien)

In der gleichen Datei .htaccess lassen sich auch noch andere Dinge festlegen, wie z.B. Passwortschutz, URLs für Fehlermeldungen, Umleitungen etc.
Darauf gehe ich hier nicht ein.

Wenn es (wie z.B. mit dem Windows-Editor) nicht möglich ist, die Datei mit dem Namen .htaccess zu speichern, speichert man sie z.B. als htaccess.txt, kopiert sie mit FTP auf den Webserver und benennt sie dort um in .htaccess. Dann kopiert man sie zurück auf den eigenen Rechner.

Wenn man Freude hat, kann man auch eine eigene Dateiendigung für Dateien erfinden, in denen PHP interpretiert werden soll, z.B. .php3, .php4, .phtml etc. (Ob dies sinnvoll ist, bleibe dahingestellt.)
Dazu fügt man die entsprechenden Zeilen in die Datei .htaccess ein:

AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .phtml

PHP-Besonderheiten der Hostpoint-Webserver

Die AddHandler-Direktive in der .htaccess-Datei kann bei Hostpoint auch noch die Versions-Zahl enthalten:

Für PHP 5.3:
AddHandler application/x-httpd-php53 .html .htm
oder
<Files *.html >
  SetHandler application/x-httpd-php53
</Files>

(Seit der Abschaltung von PHP 5.2 am 6.6.2012 führt die Schreibweise
AddHandler application/x-httpd-php5 .html .htm
leider zu einer Fehlermeldung. Hingegen funktioniert
AddHandler application/x-httpd-php .html .htm
jetzt wieder.)

Zudem darf auf Dateien, die auf PHP geparst werden sollen, bei den Dateirechten nur der Eigentümer (Owner) Schreibrechte haben, z.B. CHMOD 755. Wenn auch Group und Others Schreibrechte haben (CHMOD 777), dann wird die Datei nicht ausgeführt und es gibt einen Internal Server Error.

SSI-Befehle in .html-Seiten (1): .htaccess-Methode

Diese Methode sollte grundsätzlich immer funktionieren und ist meiner Meinung nach die bequemste.

Problem: Wie erreicht man, dass SSI-Befehle auch in Seiten mit der Dateiendigung .html interpretiert werden?

Lösung 1: Man schreibt eine Datei mit dem Namen .htaccess und dem folgenden Inhalt:

Apache 1.3 Apache 2.0

Options +Includes
AddType text/html .shtml .html .htm
AddHandler server-parsed .shtml .html .htm

Options +Includes
AddType text/html .shtml .html .html
AddOutputFilter INCLUDES .shtml .html .html

Diese Zeilen sagen dem Webserver: "Alle Dateien mit der Endigung .shtml, .html oder .htm müssen zuerst vom SSI-Programm bearbeitet werden, bevor sie an den Browser weitergeschickt werden."

Die Zeile
Options +Includes
ist nicht immer notwendig; oft kann man sie auch weglassen. Man kann sie auch einfach durch Voranstellen eines Doppelkreuzes "auskommentieren":
# Options +Includes

Die Datei .htaccess speichert man am besten im Stammverzeichnis des Webservers (z.B. public_html).

Die Angaben in .htaccess betreffen das Verzeichnis und sämtliche Unterverzeichnisse, sofern in diesen nicht explizit etwas anderes definiert wird.

Der (kleine) Nachteil dieser Methode: Es werden sämtliche .html-Dateien eines Verzeichnisses auf SSI geparst, egal, ob sie SSI enthalten oder nicht. Das bewirkt eventuell eine minimale Verzögerung, bevor die Dateien an den Browser geschickt werden.

SSI-Befehle in .html-Seiten (2): XBitHack-Methode

Diese Methode funktioniert nur, wenn der XBitHack aktiviert ist, und man muss jedesmal, wenn man eine .html-Datei auf den Server lädt, dieser die entsprechenden Rechte geben.

Problem: Wie erreicht man, dass SSI-Befehle auch in Seiten mit der Dateiendigung .html interpretiert werden?

Lösung 2: Falls der XBitHack aktiviert ist, so werden diejenigen Dateien mit der Dateiendigung .html durch das SSI-Programm bearbeitet, die die richtigen Datei-Berechtigungen (Zugriffs-Rechte auf dem UNIX-Server) haben.
(Genau genommen betrifft der XBitHack alle Dateien, für die der MIME-Type text/html gesetzt ist.)

Den XBitHack kann man wie folgt aktivieren:

Nach der FTP-Übertragung einer .html-Datei auf den Webserver muss man für diese mit dem Befehl CHMOD die execute-Berechtigung setzen:

Owner: Read, Write und Execute
Group: Read und Execute
Other: Read und Execute
(entspricht dem Befehl chmod 755)
oder Owner: Read und Execute
Group: Read und Execute
Other: Read und Execute
(entspricht dem Befehl chmod 555)
oder Owner: Read und Execute
Group: Read und Execute
Other: Read
(entspricht dem Befehl chmod 554)

In WS_FTP geht das so: man markiert die entsprechende Datei (oder das Verzeichnis), dann Rechtsklick, dann CHMOD(Unix), dann kreuzt man die entsprechenden Rechte an. (N.B. WS_FTP zeigt nicht an, welche Rechte vorher gesetzt waren, sondern es ist einfach irgendetwas als Vorgabe angekreuzt.)

In den Webmoderatoren-Mailinglist der Uni Zürich ist beschrieben, wie man diese Berechtigungen für alle .html-Dateien eines ganzen Verzeichnisses auf einmal setzen kann. Dort wurde chmod 755 vorgeschlagen.
Weitere Infos zum CHMOD-Befehl: http://www.me.mtu.edu/help/computing/who_knows/unix/chmod.html

Der Vorteil dieser Methode: Es werden nur diejenigen Dateien interpretiert, für die man die Rechte entsprechend ändert. Das heisst, man kann im gleichen Verzeichnis einige .html-Dateien haben, die interpretiert werden, und andere, die nicht interpretiert werden (und somit etwas schneller zum User gelangen).

Der Nachteil dieser Methode: Falls man später neue, zusätzliche .html-Dateien auf den Server kopiert, haben diese die entsprechenden Rechte nicht automatisch, sondern man muss sie immer extra neu setzen. (Wenn man eine aktualisierte Datei hochlädt, hat diese meistens automatisch die gleichen Rechte wie die bereits vorhandene Datei mit dem gleichen Namen.)


Weitere Informationen


Microsoft IIS

.htaccess-Dateien sind auf dem IIS wirkungslos.

Soviel ich weiss, ist es auf dem Microsoft-IIS-Webserver nicht möglich, SSI oder PHP in Dateien mit der Endigung .htm auszuführen.


<= Zurück zur Übersicht PHP/SSI

Alle Angaben ohne Gewähr. Die Anwendung geschieht auf eigenes Risiko.

Autor: Thomas Lüthi, info@tomogramm.ch - Letzte Änderung: 14.12.2004