.htaccess-Dateien

Verwendete Module

core
mod_auth
mod_cgi
mod_includes
mod_mime
Verwendete Direktiven

AccessFileName
AllowOverride
Options
AddHandler
SetHandler
AuthType
AuthName
AuthUserFile
AuthGroupFile
Require

Worum handelt es sich und wie werden sie verwendet?

.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.

Wann man .htaccess-Dateien (nicht) verwendet

Im 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

Wie werden Anweisungen abgearbeitet?

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.

Beispiel zu Authentisierung

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.

Beispiel zu Server Side Includes

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.

Beispiel zu CGI

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.

Problembehebung

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.