.htaccess
.htaccess - Datei zur Zugriffssteuerung
Beschreibung
| Verwandte Module | Verwandte Richtlinien |
|---|---|
|
httpd ermöglicht eine dezentrale Verwaltung der Konfiguration über spezielle Dateien, die innerhalb des Webbaums platziert werden
- Die speziellen Dateien heißen in der Regel
.htaccess, aber jeder Name kann in der DirektiveAccessFileNameangegeben werden - Direktiven in
.htaccess-Dateiengelten für das Verzeichnis, in dem Sie die Datei ablegen, sowie für alle Unterverzeichnisse - Die
.htaccess-Dateienfolgen der gleichen Syntax wie die Hauptkonfigurationsdateien - Da
.htaccess-Dateienbei jeder Anfrage gelesen werden, sind Änderungen in diesen Dateien sofort wirksam
Um herauszufinden, welche Direktiven in .htaccess-Dateien platziert werden können, prüfen Sie den Kontext der Direktive
- Der Serveradministrator steuert weiter, welche Direktiven in
.htaccess-Dateienplatziert werden können, indem er dieAllowOverride-Direktivein den Hauptkonfigurationsdateien konfiguriert
| Verwandte Module | Verwandte Richtlinien |
|---|---|
|
|
Sie sollten die Verwendung von .htaccess-Dateien vollständig vermeiden, wenn Sie Zugriff auf die Konfigurationsdatei des httpd-Hauptservers haben
- Die Verwendung von
.htaccess-Dateienverlangsamt Ihren Apache http-Server - Jede Direktive, die Sie in eine
.htaccess-Dateiaufnehmen können, sollten Sie besser in einenDirectory-Blocksetzen, da sie die gleiche Wirkung bei besserer Leistung hat
.htaccess-Dateien (oder "verteilte Konfigurationsdateien") bieten eine Möglichkeit, Konfigurationsänderungen für einzelne Verzeichnisse vorzunehmen
- Eine Datei, die eine oder mehrere Konfigurationsanweisungen enthält, wird in einem bestimmten Dokumentverzeichnis abgelegt, und die Anweisungen gelten für dieses Verzeichnis und alle seine Unterverzeichnisse
.htaccess-Datei
Wenn Sie Ihre .htaccess-Datei anders nennen wollen, können Sie den Namen der Datei mit der Direktive AccessFileName ändern
- Wenn Sie zum Beispiel die Datei lieber
.confignennen möchten, können Sie Folgendes in Ihre Serverkonfigurationsdatei einfügen
AccessFileName ".config"
Im Allgemeinen verwenden .htaccess-Dateien die gleiche Syntax wie die Hauptkonfigurationsdateien
- Was Sie in diese Dateien aufnehmen können, wird durch die Richtlinie
AllowOverridebestimmt - Diese Richtlinie legt in Kategorien fest, welche Richtlinien beachtet werden, wenn sie in einer
.htaccess-Dateigefunden werden - Wenn eine Direktive in einer
.htaccess-Dateierlaubt ist, enthält die Dokumentation zu dieser Direktive einen Abschnitt Override, der angibt, welcher Wert inAllowOverridestehen muss, damit diese Direktive erlaubt ist
Wenn Sie sich beispielsweise die Dokumentation der AddDefaultCharset-Direktiveansehen, werden Sie feststellen, dass sie in .htaccess-Dateienzulässig ist. (Siehe die Zeile Context in der Zusammenfassung der Direktive.) Die Zeile Override lautet FileInfo
- Sie müssen also mindestens
AllowOverride FileInfohaben, damit diese Richtlinie in.htaccess-Dateienbeachtet wird
- Beispiel
| Kontext | Serverkonfiguration, virtueller Host, Verzeichnis, .htaccess |
| Überschreiben | DateiInfo |
Wenn Sie sich nicht sicher sind, ob eine bestimmte Richtlinie in einer. htaccess-Datei zulässig ist, sehen Sie in der Dokumentation zu dieser Richtlinie nach und prüfen Sie die Kontextzeile für ".htaccess"
Wann man .htaccess-Dateien (nicht) verwenden sollte
Im Allgemeinen sollten Sie .htaccess-Dateien nur verwenden, wenn Sie keinen Zugriff auf die Hauptkonfigurationsdatei des Servers haben
- Es ist zum Beispiel ein weit verbreiteter Irrglaube, dass die Benutzerauthentifizierung immer in
.htaccess-Dateienerfolgen sollte, und in den letzten Jahren ist ein weiterer Irrglaube entstanden, dassmod_rewrite-Direktivenin.htaccess-Dateienenthalten sein müssen - Das ist einfach nicht der Fall
- Sie können die Konfiguration der Benutzerauthentifizierung in der Hauptkonfiguration des Servers vornehmen, und dies ist auch die bevorzugte Vorgehensweise
- Ebenso funktionieren die
mod_rewrite-Direktivenin vielerlei Hinsicht besser in der Hauptserverkonfiguration
.htaccess-Dateien sollten in Fällen verwendet werden, in denen die Inhaltsanbieter Konfigurationsänderungen am Server pro Verzeichnis vornehmen müssen, aber keinen Root-Zugriff auf das Serversystem haben
- Falls der Serveradministrator nicht bereit ist, häufige Konfigurationsänderungen vorzunehmen, kann es wünschenswert sein, einzelnen Benutzern zu erlauben, diese Änderungen in
.htaccess-Dateienselbst vorzunehmen - Dies gilt zum Beispiel für Fälle, in denen ISPs mehrere Benutzerseiten auf einem einzigen Rechner hosten und ihren Benutzern die Möglichkeit geben wollen, ihre Konfiguration zu ändern
Im Allgemeinen sollte die Verwendung von .htaccess-Dateien jedoch nach Möglichkeit vermieden werden
- Jede Konfiguration, die Sie in einer
.htaccess-Dateivornehmen möchten, kann genauso gut in einem<Directory>-Abschnittin Ihrer Hauptkonfigurationsdatei des Servers vorgenommen werden
Es gibt zwei Hauptgründe, die Verwendung von . htaccess-Dateien zu vermeiden
Der erste Punkt ist die Leistung
- Wenn
AllowOverrideso eingestellt ist, dass die Verwendung von.htaccess-Dateienerlaubt ist, sucht httpd in jedem Verzeichnis nach.htaccess-Dateien - Das Zulassen von
.htaccess-Dateienführt also zu Leistungseinbußen, unabhängig davon, ob Sie sie tatsächlich verwenden oder nicht! Außerdem wird die.htaccess-Dateijedes Mal geladen, wenn ein Dokument angefordert wird
Beachten Sie außerdem, dass httpd in allen übergeordneten Verzeichnissen nach .htaccess-Dateien suchen muss, um alle Richtlinien, die er anwenden muss, zur Verfügung zu haben. (Siehe Abschnitt über die Anwendung von Direktiven.)
Wenn also eine Datei aus dem Verzeichnis /www/htdocs/example angefordert wird, muss httpd nach den folgenden Dateien suchen
/.htaccess/www/.htaccess/www/htdocs/.htaccess/www/htdocs/example/.htaccess
Für jeden Dateizugriff aus diesem Verzeichnis gibt es also 4 zusätzliche Dateisystemzugriffe, selbst wenn keine dieser Dateien vorhanden ist.
- Beachten Sie, dass dies nur der Fall wäre, wenn .
htaccess-Dateienfür/aktiviert wären, was normalerweise nicht der Fall ist
Im Fall der RewriteRule-Direktiven müssen diese regulären Ausdrücke im .htaccess-Kontext bei jeder Anfrage an das Verzeichnis neu kompiliert werden, während sie im Kontext der Hauptserverkonfiguration einmal kompiliert und zwischengespeichert werden
- Außerdem sind die Regeln selbst komplizierter, da man die Einschränkungen umgehen muss, die mit dem Kontext pro Verzeichnis und
mod_rewriteeinhergehen - Weitere Einzelheiten zu diesem Thema finden Sie im Rewrite-Leitfaden
Die zweite Überlegung ist eine Frage der Sicherheit
- Sie erlauben den Benutzern, die Serverkonfiguration zu ändern, was zu Änderungen führen kann, über die Sie keine Kontrolle haben. Überlegen Sie sorgfältig, ob Sie Ihren Benutzern diese Berechtigung einräumen wollen
- Beachten Sie auch, dass die Gewährung von weniger Rechten als nötig zu zusätzlichen Anfragen an den technischen Support führen wird
- Stellen Sie sicher, dass Sie Ihren Benutzern klar mitteilen, welche Berechtigungen Sie ihnen eingeräumt haben
- Wenn Sie genau angeben, was Sie für
AllowOverridefestgelegt haben, und sie auf die entsprechende Dokumentation verweisen, ersparen Sie sich später eine Menge Verwirrung
Beachten Sie, dass es völlig gleichwertig ist, eine .htaccess-Dateiin einem Verzeichnis /www/htdocs/example anzulegen, die eine Richtlinie enthält, und dieselbe Richtlinie in einen Verzeichnisabschnitt <Verzeichnis "/www/htdocs/example"> in Ihrer Hauptserverkonfiguration aufzunehmen
.htaccess-Datei in /www/htdocs/example
Inhalt der .htaccess-Datei in /www/htdocs/example
AddTypetext/example ".exm"
- Abschnitt aus Ihrer
httpd.conf-Datei
<Verzeichnis "/www/htdocs/example"> AddTypetext/example ".exm" </Verzeichnis>
Wenn Sie diese Konfiguration jedoch in Ihre Serverkonfigurationsdatei aufnehmen, wird die Leistung weniger beeinträchtigt, da die Konfiguration nur einmal beim Starten von httpd geladen wird und nicht jedes Mal, wenn eine Datei angefordert wird
Die Verwendung von .htaccess-Dateien kann vollständig deaktiviert werden, indem die Richtlinie AllowOverrideauf none gesetzt wird
AllowOverride none
Anwendung
Richtlinien angewenden
Die in einer .htaccess-Datei enthaltenen Konfigurationsanweisungen gelten für das Verzeichnis, in dem sich die .htaccess-Datei befindet, sowie für alle Unterverzeichnisse davon
- Es ist jedoch wichtig, auch daran zu denken, dass es
.htaccess-Dateienin höher gelegenen Verzeichnissen gegeben haben kann - Die Richtlinien werden in der Reihenfolge angewendet, in der sie gefunden werden
- Daher kann eine
.htaccess-Dateiin einem bestimmten Verzeichnis Richtlinien überschreiben, die sich in.htaccess-Dateienbefinden, die weiter oben im Verzeichnisbaum liegen - Und diese wiederum können Richtlinien überschreiben, die sich noch weiter oben oder in der Hauptkonfigurationsdatei des Servers selbst befinden
- Beispiel
Im Verzeichnis /www/htdocs/example1 befindet sich eine . htaccess-Datei mit folgendem Inhalt
Options +ExecCGI
(Hinweis: Sie müssen"AllowOverride Options" aktiviert haben, um die Verwendung der"Options"-Direktive in . htaccess-Dateien zu ermöglichen)
Im Verzeichnis /www/htdocs/example1/example2 haben wir eine .htaccess-Datei, die Folgendes enthält
Options Umfasst
Aufgrund dieser zweiten .htaccess-Datei im Verzeichnis /www/htdocs/example1/example2 ist die CGI-Ausführung nicht zulässig, da nur Options Includes gilt, was alle früheren Einstellungen außer Kraft setzt
- Zusammenführung von .htaccess mit den Hauptkonfigurationsdateien
Wie in der Dokumentation über Konfigurationsabschnitte beschrieben, können .htaccess-Dateien die <Directory>-Abschnitte für das entsprechende Verzeichnis außer Kraft setzen, werden aber von anderen Arten von Konfigurationsabschnitten aus den Hauptkonfigurationsdateien außer Kraft gesetzt
- Diese Tatsache kann genutzt werden, um bestimmte Konfigurationen zu erzwingen, selbst wenn eine großzügige
AllowOverride-Einstellungvorhanden ist
Um beispielsweise die Ausführung von Skripten zu verhindern, während Sie alle anderen Einstellungen in .htaccess zulassen, können Sie Folgendes verwenden
<Verzeichnis "/www/htdocs"> AllowOverride All </Verzeichnis> <Ort "/"> Options +IncludesNoExec -ExecCGI </Ort>
In diesem Beispiel wird davon ausgegangen, dass Ihr DocumentRoot /www/htdocs lautet
Authentifizierung
Server Side Includes
Apache/HTTP/Server Side Includes
Umschreibregeln
CGI
Fehlersuche
Wenn Sie Konfigurationsrichtlinien in eine .htaccess-Dateieinfügen und nicht den gewünschten Effekt erzielen, kann eine Reihe von Dingen falsch laufen
In den meisten Fällen liegt das Problem darin, dass AllowOverride nicht so eingestellt ist, dass Ihre Konfigurationsrichtlinien beachtet werden
- Vergewissern Sie sich, dass für den fraglichen Dateibereich nicht die Option
AllowOverride Nonein Kraft ist - Ein guter Test hierfür ist, Müll in Ihre
.htaccess-Dateizu schreiben und die Seite neu zu laden - Wenn kein Serverfehler generiert wird, dann haben Sie mit ziemlicher Sicherheit
AllowOverride Nonein Kraft
Wenn Sie dagegen beim Zugriff auf Dokumente Serverfehler erhalten, überprüfen Sie Ihr httpd-Fehlerprotokoll
- Es wird Ihnen wahrscheinlich mitteilen, dass die in Ihrer
.htaccess-Dateiverwendete Richtlinie nicht zulässig ist
[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex hier nicht erlaubt
Dies weist entweder darauf hin, dass Sie eine Direktive verwendet haben, die in .htaccess-Dateien niemals erlaubt ist, oder AllowOverride einfach nicht auf eine Stufe gesetzt haben, die für die von Ihnen verwendete Direktive ausreicht
- Schauen Sie in der Dokumentation für die jeweilige Richtlinie nach, um festzustellen, was der Fall ist
Es kann aber auch sein, dass Sie einen Syntaxfehler bei der Verwendung der Richtlinie selbst haben
[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: Falsche Flaggenbegrenzer
In diesem Fall sollte sich die Fehlermeldung auf den jeweiligen Syntaxfehler beziehen, den Sie begangen haben
Anhang
Siehe auch
Links
Weblinks