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.
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 |
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
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.
.htaccess
-MethodeDiese 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 |
---|---|
|
|
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.
XBitHack
-MethodeProblem: 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:
.htaccess
den XBitHack weder
aktivieren noch deaktivieren mit dem Befehl XBitHack off!
Es
gibt sonst in jedem Fall einen Internal Server Error, und es wird gar nichts
mehr aus diesem Verzeichnis angezeigt!) .htaccess
und dem folgenden Inhalt:XBitHack full
XBitHack on
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.)
Thema | Apache 1.3 |
Apache 2.0 |
---|---|---|
Dokumentation |
Apache 1.3 Dokumentation http://httpd.apache.org/docs/ |
Apache 2.0 Dokumentation http://httpd.apache.org/docs-2.0/ |
.htaccess-Files Tutorial |
.htaccess Tutorial Apache 1.3 |
.htaccess Tutorial Apache 2.0 |
AddType Direktive |
AddType Apache 1.3 |
AddType Apache 2.0 |
AddHandler Direktive |
AddHandler Apache 1.3 |
AddHandler Apache 2.0 |
SSI bzw. mod_include |
mod_include Apache 1.3 |
mod_include Apache 2.0 |
.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