.htaccess-Dateien.htaccess-Dateien
(nicht) verwendetVerwendete Modulecore
mod_auth
mod_cgi
mod_includes mod_mime |
Verwendete
Direktiven
AccessFileName
AllowOverride
Options
AddHandler
SetHandler
AuthType
AuthName
AuthUserFile
AuthGroupFile
Require |
.htaccess-Dateien (oder "verteilte
Konfigurationsdateien") bieten eine Möglichkeit,
verzeichnisbasiert Änderungen an der Konfiguration
vorzunehmen. Eine Datei, die eine oder oder mehrere
Konfigurationsanweisungen enthält, wird in einem
bestimmten Dokumenten-Verzeichnis abgelegt. Die Direktiven
gelten dann für dieses Verzeichnis und alle seine
Unterverzeichnisse.
Hinweis: Wenn Sie die .htaccess-Datei anders
benennen möchten, können Sie den Namen mit Hilfe der
Anweisung
AccessFileName ändern. Wenn Sie also die Datei
z.B. lieber .config nennen möchten, schreiben
Sie Folgendes in Ihre Serverkonfiguration:
AccessFileName .config
Was diese Dateien enthalten dürfen, wird mit der
Anweisung
AllowOverride festgelegt. Sie bestimmt nach
Kategorien, welche Direktiven beachtet werden, wenn sie in
einer .htaccess-Datei auftauchen. Wenn eine
Anweisung innerhalb einer .htaccess-Datei generell
erlaubt ist, enthält die Dokumentation zu dieser Anweisung
den Abschnitt "Override", der angibt, welcher Wert für
AllowOverride gesetzt werden muß, damit die
Anweisung erlaubt ist.
Wenn Sie sich beispielsweise die Dokumentation zur Direktive
AddDefaultCharset anschauen, werden Sie sehen, dass sie in
.htaccess-Dateien erlaubt ist (siehe
"Context"-Zeile in der Direktiven-Übersicht). In der Override-Zeile
steht "FileInfo". Somit müssen Sie mindestens
"AllowOverride FileInfo" einstellen, damit diese
Direktive in .htaccess-Dateien beachtet wird.
Beispiel:
Context: server config, virtual host, directory, .htaccess Override: FileInfo
Wenn Sie unsicher sind, ob eine bestimmte Anweisung
innerhalb einer .htaccess-Datei erlaubt ist, sehen
Sie in der Dokumentation zu dieser Anweisung nach, ob die
"Context"-Zeile ".htaccess" enthält.
.htaccess-Dateien (nicht) verwendetIm Allgemeinen sollten Sie .htaccess-Dateien
niemals verwenden, es sei denn, Sie haben keinen Zugriff auf
die Hauptserverkonfiguration. Es gibt beispielweise das
weitverbreitete Missverständnis, dass
Benutzerauthentisierung immer in .htaccess-Dateien
erfolgen sollte. Das ist schlicht und einfach nicht der Fall.
Sie können die Konfigurationsanweisungen für die
Benutzerauthentisierung in der Hauptserverkonfiguration
unterbringen, was eigentlich die bevorzugte Variante
darstellt.
.htaccess-Dateien sollten verwendet werden,
wenn die Inhaltsanbieter Konfigurationsänderungen auf
Verzeichnisbasis vornehmen müssen, aber keinen
Administrator-Zugang zum Serversystem besitzen. Falls der
Server-Administrator nicht ständig die Konfiguration
ändern will, ist es unter Umständen das Beste,
einzelnen Benutzern zu erlauben, die Änderungen in
.htaccess-Dateien selbst durchzuführen. Das ist
insbesondere dort der Fall, wo ISPs viele Benutzer auf einer
einzelnen Maschine unterbringen und den Benutzern die
Möglichkeit geben wollen, ihre Konfiguration zu
verändern.
Wie dem auch sei, im Allgemeinen sollte die Verwendung von
.htaccess-Dateien nach Möglichkeit vermieden
werden. Jede Konfiguration, die Sie in einer
.htaccess-Datei unterbringen wollen, kann genau so gut
innerhalb eines
<Directory>-Abschnitts in Ihrer
Hauptserverkonfiguration stehen.
Es gibt hauptsächlich zwei Gründe, die gegen die
Verwendung von .htaccess-Dateien sprechen.
Der erste Grund ist die Performance. Wenn
AllowOverride so gesetzt ist, dass die Verwendung von
.htaccess-Dateien erlaubt ist, sucht der Apache in
jedem Verzeichnis nach .htaccess-Dateien. Somit
geht allein die Erlaubnis von .htaccess-Dateien zu
Lasten der Performance, egal ob Sie sie tatsächlich
benutzen oder nicht! Außerdem wird die
.htaccess-Datei jedesmal geladen, wenn ein Dokument
angefordert wird.
Beachten Sie weiterhin, dass der Apache in allen
übergeordneten Verzeichnissen nach
.htaccess-Dateien suchen muss, damit er den kompletten
Satz von Anweisungen bekommt, die er anwenden soll (Siehe auch
Wie werden die Anweisungen abgearbeitet?).
Wenn also eine Datei aus dem Verzeichnis
/www/htdocs/Beispiel angefordert wird, muss der Apache
nach den folgenden Dateien suchen:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/Beispiel/.htaccess
So ergeben sich für jeden Zugriff auf eine Datei in
diesem Verzeichnis 4 zusätzliche Zugriffe auf das
Dateisystem, auch wenn keine der Dateien vorhanden ist.
(Beachten Sie, dass das nur zutrifft, wenn
.htaccess-Dateien für / aktiviert sind.
Normalerweise ist das nicht der Fall.)
Die zweite Überlegung betrifft die Sicherheit. Sie erlauben Benutzern, die Serverkonfiguration zu modifizieren, was zur Folge haben kann, dass Sie über die Änderungen keinerlei Kontrolle (mehr) besitzen. Überlegen Sie deshalb sorgfältig, ob Sie Ihren Benutzern dieses Privileg zugestehen wollen.
Beachten Sie, dass es vollkommen gleichwertig ist, ob Sie
eine .htaccess-Datei, die eine Anweisung
enthält, in einem Verzeichnis
/www/htdocs/Beispiel ablegen oder die Anweisung in einem
"Directory"-Abschnitt <Directory
/www/htdocs/Beispiel> in Ihrer
Hauptserverkonfiguration unterbringen:
.htaccess-Datei in
/www/htdocs/Beispiel:
AddType text/beispiel .bsp
httpd.conf
<Directory /www/htdocs/Beispiel>
AddType text/beispiel .bsp
</Directory>
Es geht weniger auf die Perfomance, wenn Sie die Konfigurationsanweisungen in Ihrer Serverkonfiguration unterbringen, da diese einmalig beim Start des Apache eingelesen wird und nicht bei jeder Anforderung einer Datei.
Die Verwendung von .htaccess-Dateien kann
komplett abgeschaltet werden, indem die Direktive
AllowOverride auf "none" gesetzt wird.
AllowOverride None
Die Konfigurationsanweisungen, die in einer
.htaccess-Datei abgelegt sind, werden auf das
Verzeichnis, in dem sich die .htaccess-Datei
befindet und seine Unterverzeichnisse angewendet. Es ist
wichtig, daran zu denken, dass es auch in übergeordneten
Verzeichnissen .htaccess-Dateien geben kann. Die
Anweisungen werden in der Reihenfolge ausgeführt, in der
der sie gefunden werden. Deshalb kann eine
.htaccess-Datei in einem bestimmten Verzeichnis
Anweisungen überschreiben, die in
.htaccess-Dateien zu finden sind, welche sich in
übergeordneten Verzeichnissen befinden. Diese wiederum
haben möglicherweise Anweisungen überschrieben, die
noch weiter oben gefunden wurden bzw. in der
Hauptserverkonfiguration selbst.
Beispiel:
Im Verzeichnis /www/htdocs/Beispiel1 haben wir
eine .htaccess-Datei, die Folgendes
enthält:
Options +ExecCGI
(Anmerkung: Sie müssen "AllowOverride
Options" gesetzt haben, um die Direktive "Options" in
.htaccess-Dateien zu erlauben.)
Im Verzeichnis /www/htdocs/Beispiel1/Beispiel2
haben wir eine .htaccess-Datei, die
enthält::
Options Includes
Aufgrund der zweiten .htaccess-Datei im
Verzeichnis /www/htdocs/Beispiel1/Beispiel2 ist
die Ausführung von CGI-Programmen nicht erlaubt, da nur
Options Includes wirksam ist, was jede andere
Einstellung komplett überschreibt, die evtl. vorher aktiv
war.
Wenn Sie direkt zu diesem Teil dieses Dokuments gesprungen
sind, um herauszufinden, wie Authentisierung gehandhabt wird,
gibt es einen wichtigen Punkt anzumerken: Es ist ein
verbreitetes Missverständnis, dass
.htaccess-Dateien für die Passwortabfrage verwendet
werden müssen. Das ist nicht der Fall. Anweisungen
für die Auhentisierung innerhalb eines
<Directory>-Abschnitts in der
Hauptserverkonfiguration sind auf jeden Fall vorzuziehen.
.htaccess-Dateien sollten Sie nur verwenden, wenn
Sie keinen Zugriff auf die Hauptserverkonfiguration haben.
Weiter oben wird erörtert, wann .htaccess
eingesetzt werden sollten und wann nicht - siehe dort.
Wenn das geklärt ist und Sie immer noch der Meinung
sind, eine .htaccess-Datei zu benötigen, ist
eine Konfiguration, wie die folgende wahrscheinlich das, was
Sie suchen.
Sie müssen "AllowOverride AuthConfig"
eingestellt haben, damit diese Anweisungen beachtet werden.
Inhalt der .htaccess-Datei:
AuthType Basic
AuthName "Passwort erforderlich"
AuthUserFile /www/passwoerter/passwort.datei
AuthGroupFile /www/passwoerter/gruppen.datei
Require Group admins
Beachten Sie, dass AllowOverride AuthConfig
eingestellt sein muss, damit diese Anweisungen irgendeine
Auswirkung haben.
Für eine umfassendere Besprechung von Authentisierung und Autorisierung sehen Sie sich bitte das Tutorial zur Authentisierung an.
Eine weitere gebräuchliche Verwendung von
.htaccess-Dateien besteht darin, Server Side Includes
für ein bestimmtes Verzeichnis zu aktivieren. Das kann mit
Hilfe der folgenden Konfigurationsanweisungen erreicht werden,
wenn sie in einer .htaccess-Datei im
gewünschten Verzeichnis abgelegt werden:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
Beachten Sie, dass sowohl AllowOverride Options
als auch AllowOverride FileInfo eingestellt sein
müssen, damit diese Anweisungen irgendeine Wirkung
zeigen.
Für eine umfassendere Besprechung von Server Side Includes sehen Sie sich bitte das SSI-Tutorial an.
Zu guter Letzt möchten Sie
.htaccess-Dateien vielleicht verwenden, um die
Ausführung von CGI-Programmen für ein bestimmtes
Verzeichnis zu erlauben. Das kann mit der folgenden
Konfiguraton realisiert werden:
Options +ExecCGI
AddHandler cgi-script cgi pl
Alternativ, wenn Sie alle Dateien im angegebenen Verzeichnis als CGI-Programme betrachtet haben möchten, kann das mit der folgenden Konfiguration erfolgen:
Options +ExecCGI
SetHandler cgi-script
Beachten Sie, dass AllowOverride Options
eingestellt sein muss, damit die Anweisungen irgendeine Wirkung
zeigen.
Für eine umfassende Besprechung von CGI-Programmierung und -Konfiguration sehen Sie sich bitte, das CGI-Tutorial an.
Wenn Sie Anweisungen in einer .htaccess-Datei
ablegen und nicht den gewünschten Effekt bekommen, gibt es
eine mehrere Dinge, die möglicherweise falsch laufen.
Das häufigste Problem ist, dass AllowOverride
nicht so gesetzt ist, dass Ihre Konfigurationsanweisungen
beachtet werden. Vergewissern Sie sich, dass nicht
AllowOverride None für den in Frage kommenden
Dateibereich eingestellt ist. Ein guter Test dafür besteht
darin, Müll in Ihre .htaccess-Datei zu
schreiben und die Seite nochmal zu laden. Wenn kein
Serverfehler erzeugt wird, ist mit höchster
Wahrscheinlichkeit AllowOverride None
eingestellt.
Andererseits, wenn Sie bei Zugriffen auf Dokumente Serverfehler bekommen, prüfen Sie das Errorlog des Apache. Es wird Ihnen wahrscheinlich mitteilen, dass die Anweisung, die Sie in Ihrer .htaccess-Datei verwendet haben, nicht erlaubt ist. Alternativ teilt es Ihnen vielleicht auch mit, dass Sie einen Syntax-Fehler in einer Ihrer Anweisungen haben, den Sie dann ausbessern müssen.