.htaccess: Unterschied zwischen den Versionen
K Textersetzung - „Kategorie:Apache/HTTP Server“ durch „Kategorie:Apache/HTTP“ |
|||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Apache/HTTP/Konfiguration]] | [[Kategorie:Apache/HTTP/Konfiguration]] | ||
== .htaccess-Dateien == | |||
{| class="wikitable float" | |||
!Verwandte Module | |||
!Verwandte Richtlinien | |||
|- | |||
| | |||
* <code>Kernstück</code> | |||
* <code>mod_authn_file</code> | |||
* <code>mod_authz_groupfile</code> | |||
* <code>mod_cgi</code> | |||
* <code>mod_include</code> | |||
* <code>mod_mime</code> | |||
| | |||
* <code>ZugriffDateiname</code> | |||
* <code>AllowOverride</code> | |||
* <code>Optionen</code> | |||
* <code>AddHandler</code> | |||
* <code>SetHandler</code> | |||
* <code>AuthType</code> | |||
* <code>AuthName</code> | |||
* <code>AuthUserFile</code> | |||
* <code>AuthGroupFile</code> | |||
* <code>Fordern Sie an.</code> | |||
|} | |||
Sie sollten die Verwendung von <code>.htaccess-Dateien</code> vollständig vermeiden, wenn Sie Zugriff auf die Konfigurationsdatei des httpd-Hauptservers haben. | |||
* Die Verwendung von <code>.htaccess-Dateien</code> verlangsamt Ihren Apache http-Server. | |||
* Jede Direktive, die Sie in eine <code>.htaccess-Datei</code> aufnehmen können, sollten Sie besser in einen <code>Directory-Block</code> setzen, da sie die gleiche Wirkung bei besserer Leistung hat. | |||
== Was sie sind/Wie man sie benutzt == | |||
<code>.htaccess-Dateien</code> (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. | |||
=== Anmerkung: === | |||
Wenn Sie Ihre <code>.htaccess-Datei</code> anders nennen wollen, können Sie den Namen der Datei mit der Direktive <code>AccessFileName</code> ändern. | |||
* Wenn Sie zum Beispiel die Datei lieber <code>.config</code> nennen möchten, können Sie Folgendes in Ihre Serverkonfigurationsdatei einfügen: | |||
Zugriffsdateiname ".config" | |||
Im Allgemeinen verwenden <code>.htaccess-Dateien</code> die gleiche Syntax wie die Hauptkonfigurationsdateien. | |||
* Was Sie in diese Dateien aufnehmen können, wird durch die Richtlinie <code>AllowOverride</code> bestimmt. | |||
* Diese Richtlinie legt in Kategorien fest, welche Richtlinien beachtet werden, wenn sie in einer <code>.htaccess-Datei</code> gefunden werden. | |||
* Wenn eine Direktive in einer <code>.htaccess-Datei</code> erlaubt ist, enthält die Dokumentation zu dieser Direktive einen Abschnitt Override, der angibt, welcher Wert in <code>AllowOverride</code> stehen muss, damit diese Direktive erlaubt ist. | |||
Wenn Sie sich beispielsweise die Dokumentation der <code>AddDefaultCharset-Direktive</code>ansehen, werden Sie feststellen, dass sie in <code>.htaccess-Dateien</code>zulässig ist. (Siehe die Zeile Context in der Zusammenfassung der Direktive.) Die Zeile Override lautet <code>FileInfo</code>. | |||
* Sie müssen also mindestens <code>AllowOverride FileInfo</code> haben, damit diese Richtlinie in <code>.htaccess-Dateien</code> beachtet wird. | |||
; Beispiel | |||
{| class="wikitable" | |||
|Kontext ||Serverkonfiguration, virtueller Host, Verzeichnis, .htaccess | |||
|- | |||
|Überschreiben || |DateiInfo | |||
|} | |||
Wenn Sie sich nicht sicher sind, ob eine bestimmte Richtlinie in einer. <code>htaccess-Datei</code> 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 <code>.htaccess-Dateien</code> 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 <code>.htaccess-Dateien</code> erfolgen sollte, und in den letzten Jahren ist ein weiterer Irrglaube entstanden, dass <code>mod_rewrite-Direktiven</code> in <code>.htaccess-Dateien</code> enthalten 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 <code>mod_rewrite-Direktiven</code> in vielerlei Hinsicht besser in der Hauptserverkonfiguration. | |||
<code>.htaccess-Dateien</code> 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 <code>.htaccess-Dateien</code> selbst 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 <code>.htaccess-Dateien</code> jedoch nach Möglichkeit vermieden werden. | |||
* Jede Konfiguration, die Sie in einer <code>.htaccess-Datei</code> vornehmen möchten, kann genauso gut in einem <code><Directory>-Abschnitt</code> in Ihrer Hauptkonfigurationsdatei des Servers vorgenommen werden. | |||
Es gibt zwei Hauptgründe, die Verwendung von . <code>htaccess-Dateien</code> zu vermeiden. | |||
Der erste Punkt ist die Leistung. | |||
* Wenn <code>AllowOverride</code>so eingestellt ist, dass die Verwendung von <code>.htaccess-Dateien</code> erlaubt ist, sucht httpd in jedem Verzeichnis nach <code>.htaccess-Dateien</code>. | |||
* Das Zulassen von <code>.htaccess-Dateien</code> führt also zu Leistungseinbußen, unabhängig davon, ob Sie sie tatsächlich verwenden oder nicht! Außerdem wird die <code>.htaccess-Datei</code> jedes Mal geladen, wenn ein Dokument angefordert wird. | |||
Beachten Sie außerdem, dass httpd in allen übergeordneten Verzeichnissen nach <code>.htaccess-Dateien</code> 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 <code>/www/htdocs/example</code> angefordert wird, muss httpd nach den folgenden Dateien suchen: | |||
<code>/.htaccess</code> | |||
<code>/www/.htaccess</code> | |||
<code>/www/htdocs/.htaccess</code> | |||
<code>/www/htdocs/example/.htaccess</code> | |||
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 . <code>htaccess-Dateien</code> für <code>/</code> aktiviert wären, was normalerweise nicht der Fall ist). | |||
Im Fall der <code>RewriteRule-Direktiven</code> müssen diese regulären Ausdrücke im <code>.htaccess-Kontext</code> 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 <code>mod_rewrite</code> einhergehen. | |||
* 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 <code>AllowOverride</code> festgelegt 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 <code>.htaccess-Datei</code>in einem Verzeichnis <code>/www/htdocs/example</code> anzulegen, die eine Richtlinie enthält, und dieselbe Richtlinie in einen Verzeichnisabschnitt <code><Verzeichnis "/www/htdocs/example"></code> in Ihrer Hauptserverkonfiguration aufzunehmen: | |||
<code>.htaccess-Datei</code> in <code>/www/htdocs/example</code>: | |||
=== Inhalt der .htaccess-Datei in <code>/www/htdocs/example</code> === | |||
AddTypetext/example ".exm" | |||
=== Abschnitt aus Ihrer <code>httpd.conf-Datei</code> === | |||
<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 <code>.htaccess-Dateien</code> kann vollständig deaktiviert werden, indem die Richtlinie <code>AllowOverride</code>auf <code>none</code> gesetzt wird: | |||
AllowOverride Keine | |||
== Richtlinien angewenden == | |||
Die in einer <code>.htaccess-Datei</code> enthaltenen Konfigurationsanweisungen gelten für das Verzeichnis, in dem sich die <code>.htaccess-Datei</code> befindet, sowie für alle Unterverzeichnisse davon. | |||
* Es ist jedoch wichtig, auch daran zu denken, dass es <code>.htaccess-Dateien</code> in höher gelegenen Verzeichnissen gegeben haben kann. | |||
* Die Richtlinien werden in der Reihenfolge angewendet, in der sie gefunden werden. | |||
* Daher kann eine <code>.htaccess-Datei</code> in einem bestimmten Verzeichnis Richtlinien überschreiben, die sich in <code>.htaccess-Dateien</code> befinden, 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 <code>/www/htdocs/example1</code> befindet sich eine . <code>htaccess-Datei</code> mit folgendem Inhalt: | |||
Optionen +ExecCGI | |||
(Hinweis: Sie müssen<code>"AllowOverride Options</code>" aktiviert haben, um die Verwendung der<code>"Options</code>"-Direktive in . <code>htaccess-Dateien</code> zu ermöglichen). | |||
Im Verzeichnis <code>/www/htdocs/example1/example2</code> haben wir eine <code>.htaccess-Datei</code>, die Folgendes enthält: | |||
Optionen Umfasst | |||
Aufgrund dieser zweiten <code>.htaccess-Datei</code> im Verzeichnis <code>/www/htdocs/example1/example2</code> ist die CGI-Ausführung nicht zulässig, da nur <code>Options Includes</code> 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 <code>.htaccess-Dateien</code> die <code><Directory>-Abschnitte</code> 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 <code>AllowOverride-Einstellung</code> vorhanden ist. | |||
* Um beispielsweise die Ausführung von Skripten zu verhindern, während Sie alle anderen Einstellungen in <code>.htaccess</code> zulassen, können Sie Folgendes verwenden: | |||
<Verzeichnis "/www/htdocs"> | |||
AllowOverride All | |||
</Verzeichnis> | |||
<Ort "/"> | |||
Optionen +IncludesNoExec -ExecCGI | |||
</Ort> | |||
In diesem Beispiel wird davon ausgegangen, dass Ihr <code>DocumentRoot</code> <code>/www/htdocs</code> lautet. | |||
== Beispiel für die Authentifizierung == | |||
Wenn Sie direkt zu diesem Teil des Dokuments gesprungen sind, um herauszufinden, wie Sie die Authentifizierung durchführen, ist es wichtig, eine Sache zu beachten. | |||
* Es ist ein weit verbreiteter Irrglaube, dass Sie <code>.htaccess-Dateien</code> verwenden müssen, um die Passwortauthentifizierung zu implementieren. | |||
* Dies ist jedoch nicht der Fall. | |||
* Authentifizierungsrichtlinien in einem <code><Directory>-Abschnitt</code>in Ihrer Hauptkonfigurationsdatei des Servers zu platzieren, ist der bevorzugte Weg, dies zu implementieren, und <code>.htaccess-Dateien</code> sollten nur verwendet werden, wenn Sie keinen Zugriff auf die Hauptkonfigurationsdatei des Servers haben. | |||
* Siehe oben für eine Diskussion darüber, wann Sie <code>.htaccess-Dateien</code> verwenden sollten und wann nicht. | |||
Wenn Sie dennoch der Meinung sind, dass Sie eine . <code>htaccess-Datei</code> verwenden müssen, könnte eine Konfiguration wie die folgende für Sie geeignet sein. | |||
Inhalt der <code>.htaccess-Datei</code>: | |||
AuthType Basic | |||
AuthName "Password Required" | |||
AuthUserFile "/www/passwords/password.file" | |||
AuthGroupFile "/www/passwords/group.file" | |||
Require group admins | |||
Beachten Sie, dass <code>AllowOverride AuthConfig</code> in Kraft sein muss, damit diese Direktiven eine Wirkung haben. | |||
Eine ausführlichere Erläuterung der Authentifizierung und Autorisierung finden Sie im Tutorial zur Authentifizierung. | |||
== Beispiel für Server Side Includes == | |||
Eine weitere häufige Verwendung von <code>.htaccess-Dateien</code> ist die Aktivierung von Server Side Includes für ein bestimmtes Verzeichnis. | |||
* Dies kann mit den folgenden Konfigurationsanweisungen erfolgen, die in einer <code>.htaccess-Datei</code> im gewünschten Verzeichnis platziert werden: | |||
Optionen +Includes | |||
AddType text/htmlshtmlAddHandler server-parsed shtml | |||
Beachten Sie, dass <code>AllowOverride Options</code> und <code>AllowOverride FileInfo</code> beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben. | |||
Im SSI-Tutorial finden Sie eine ausführlichere Diskussion über serverseitige Includes. | |||
== Umschreibregeln in .htaccess-Dateien == | |||
Bei der Verwendung von <code>RewriteRule</code> in<code>.htaccess-Dateien</code> ist zu beachten, dass der verzeichnisbezogene Kontext die Dinge ein wenig verändert. | |||
* Insbesondere werden die Regeln als relativ zum aktuellen Verzeichnis betrachtet und nicht als die ursprünglich angeforderte URI. | |||
* Betrachten Sie die folgenden Beispiele: | |||
# In httpd.conf | |||
RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" | |||
# In .htaccess im Stammverzeichnis | |||
RewriteRule "^images/(.+)\.jpg" "images/$1.png" | |||
# In .htaccess in images/ | |||
RewriteRule "^(.+)\.jpg" "$1.png" | |||
In einer <code>.htaccess</code> in Ihrem Dokumentenverzeichnis wird der führende Schrägstrich aus dem an <code>RewriteRule</code> übergebenen Wert entfernt, und im Unterverzeichnis<code>images</code> wird <code>/images/</code> daraus entfernt. | |||
* Daher muss Ihr regulärer Ausdruck auch diesen Teil auslassen. | |||
Weitere Informationen zur Verwendung von mod_rewrite finden Sie in der Dokumentation zu <code>mod_rewrite</code>. | |||
== CGI-Beispiel == | |||
Schließlich können Sie eine <code>.htaccess-Datei</code> verwenden, um die Ausführung von CGI-Programmen in einem bestimmten Verzeichnis zu erlauben. | |||
* Dies lässt sich mit der folgenden Konfiguration realisieren: | |||
Optionen +ExecCGI | |||
AddHandler cgi-script cgi pl | |||
Wenn Sie möchten, dass alle Dateien in dem angegebenen Verzeichnis als CGI-Programme betrachtet werden, können Sie dies alternativ mit der folgenden Konfiguration erreichen: | |||
Optionen +ExecCGI | |||
SetHandler cgi-script | |||
Beachten Sie, dass <code>AllowOverride Options</code> und <code>AllowOverride FileInfo</code> beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben. | |||
Im CGI-Tutorial finden Sie eine ausführlichere Beschreibung der CGI-Programmierung und -Konfiguration. | |||
== Fehlersuche == | |||
Wenn Sie Konfigurationsrichtlinien in eine <code>.htaccess-Datei</code>einfü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 <code>AllowOverride</code> nicht so eingestellt ist, dass Ihre Konfigurationsrichtlinien beachtet werden. | |||
* Vergewissern Sie sich, dass für den fraglichen Dateibereich nicht die Option <code>AllowOverride None</code> in Kraft ist. | |||
* Ein guter Test hierfür ist, Müll in Ihre <code>.htaccess-Datei</code> zu schreiben und die Seite neu zu laden. | |||
* Wenn kein Serverfehler generiert wird, dann haben Sie mit ziemlicher Sicherheit <code>AllowOverride None</code> in 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 <code>.htaccess-Datei</code> verwendete Richtlinie nicht zulässig ist. | |||
<code>[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex hier nicht erlaubt</code> | |||
Dies weist entweder darauf hin, dass Sie eine Direktive verwendet haben, die in <code>.htaccess-Dateien</code> niemals erlaubt ist, oder dass Sie <code>AllowOverride</code> 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. | |||
<code>[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: Falsche Flaggenbegrenzer</code> | |||
In diesem Fall sollte sich die Fehlermeldung auf den jeweiligen Syntaxfehler beziehen, den Sie begangen haben. | |||
# https://httpd.apache.org/docs/current/en/howto/htaccess.html |
Aktuelle Version vom 5. Mai 2024, 19:47 Uhr
.htaccess-Dateien
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-Dateien
verlangsamt Ihren Apache http-Server. - Jede Direktive, die Sie in eine
.htaccess-Datei
aufnehmen können, sollten Sie besser in einenDirectory-Block
setzen, da sie die gleiche Wirkung bei besserer Leistung hat.
Was sie sind/Wie man sie benutzt
.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.
Anmerkung:
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
.config
nennen möchten, können Sie Folgendes in Ihre Serverkonfigurationsdatei einfügen:
Zugriffsdateiname ".config"
Im Allgemeinen verwenden .htaccess-Dateien
die gleiche Syntax wie die Hauptkonfigurationsdateien.
- Was Sie in diese Dateien aufnehmen können, wird durch die Richtlinie
AllowOverride
bestimmt. - Diese Richtlinie legt in Kategorien fest, welche Richtlinien beachtet werden, wenn sie in einer
.htaccess-Datei
gefunden werden. - Wenn eine Direktive in einer
.htaccess-Datei
erlaubt ist, enthält die Dokumentation zu dieser Direktive einen Abschnitt Override, der angibt, welcher Wert inAllowOverride
stehen muss, damit diese Direktive erlaubt ist.
Wenn Sie sich beispielsweise die Dokumentation der AddDefaultCharset-Direktive
ansehen, werden Sie feststellen, dass sie in .htaccess-Dateien
zulässig ist. (Siehe die Zeile Context in der Zusammenfassung der Direktive.) Die Zeile Override lautet FileInfo
.
- Sie müssen also mindestens
AllowOverride FileInfo
haben, damit diese Richtlinie in.htaccess-Dateien
beachtet 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-Dateien
erfolgen sollte, und in den letzten Jahren ist ein weiterer Irrglaube entstanden, dassmod_rewrite-Direktiven
in.htaccess-Dateien
enthalten 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-Direktiven
in 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-Dateien
selbst 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-Datei
vornehmen möchten, kann genauso gut in einem<Directory>-Abschnitt
in 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
AllowOverride
so eingestellt ist, dass die Verwendung von.htaccess-Dateien
erlaubt ist, sucht httpd in jedem Verzeichnis nach.htaccess-Dateien
. - Das Zulassen von
.htaccess-Dateien
führt also zu Leistungseinbußen, unabhängig davon, ob Sie sie tatsächlich verwenden oder nicht! Außerdem wird die.htaccess-Datei
jedes 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-Dateien
fü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_rewrite
einhergehen. - 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
AllowOverride
festgelegt 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-Datei
in 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 AllowOverride
auf none
gesetzt wird:
AllowOverride Keine
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-Dateien
in höher gelegenen Verzeichnissen gegeben haben kann. - Die Richtlinien werden in der Reihenfolge angewendet, in der sie gefunden werden.
- Daher kann eine
.htaccess-Datei
in einem bestimmten Verzeichnis Richtlinien überschreiben, die sich in.htaccess-Dateien
befinden, 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:
Optionen +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:
Optionen 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-Einstellung
vorhanden 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 "/"> Optionen +IncludesNoExec -ExecCGI </Ort>
In diesem Beispiel wird davon ausgegangen, dass Ihr DocumentRoot
/www/htdocs
lautet.
Beispiel für die Authentifizierung
Wenn Sie direkt zu diesem Teil des Dokuments gesprungen sind, um herauszufinden, wie Sie die Authentifizierung durchführen, ist es wichtig, eine Sache zu beachten.
- Es ist ein weit verbreiteter Irrglaube, dass Sie
.htaccess-Dateien
verwenden müssen, um die Passwortauthentifizierung zu implementieren. - Dies ist jedoch nicht der Fall.
- Authentifizierungsrichtlinien in einem
<Directory>-Abschnitt
in Ihrer Hauptkonfigurationsdatei des Servers zu platzieren, ist der bevorzugte Weg, dies zu implementieren, und.htaccess-Dateien
sollten nur verwendet werden, wenn Sie keinen Zugriff auf die Hauptkonfigurationsdatei des Servers haben. - Siehe oben für eine Diskussion darüber, wann Sie
.htaccess-Dateien
verwenden sollten und wann nicht.
Wenn Sie dennoch der Meinung sind, dass Sie eine . htaccess-Datei
verwenden müssen, könnte eine Konfiguration wie die folgende für Sie geeignet sein.
Inhalt der .htaccess-Datei
:
AuthType Basic AuthName "Password Required" AuthUserFile "/www/passwords/password.file" AuthGroupFile "/www/passwords/group.file" Require group admins
Beachten Sie, dass AllowOverride AuthConfig
in Kraft sein muss, damit diese Direktiven eine Wirkung haben.
Eine ausführlichere Erläuterung der Authentifizierung und Autorisierung finden Sie im Tutorial zur Authentifizierung.
Beispiel für Server Side Includes
Eine weitere häufige Verwendung von .htaccess-Dateien
ist die Aktivierung von Server Side Includes für ein bestimmtes Verzeichnis.
- Dies kann mit den folgenden Konfigurationsanweisungen erfolgen, die in einer
.htaccess-Datei
im gewünschten Verzeichnis platziert werden:
Optionen +Includes AddType text/htmlshtmlAddHandler server-parsed shtml
Beachten Sie, dass AllowOverride Options
und AllowOverride FileInfo
beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben.
Im SSI-Tutorial finden Sie eine ausführlichere Diskussion über serverseitige Includes.
Umschreibregeln in .htaccess-Dateien
Bei der Verwendung von RewriteRule
in.htaccess-Dateien
ist zu beachten, dass der verzeichnisbezogene Kontext die Dinge ein wenig verändert.
- Insbesondere werden die Regeln als relativ zum aktuellen Verzeichnis betrachtet und nicht als die ursprünglich angeforderte URI.
- Betrachten Sie die folgenden Beispiele:
# In httpd.conf RewriteRule "^/images/(.+)\.jpg" "/images/$1.png"
# In .htaccess im Stammverzeichnis RewriteRule "^images/(.+)\.jpg" "images/$1.png"
# In .htaccess in images/ RewriteRule "^(.+)\.jpg" "$1.png"
In einer .htaccess
in Ihrem Dokumentenverzeichnis wird der führende Schrägstrich aus dem an RewriteRule
übergebenen Wert entfernt, und im Unterverzeichnisimages
wird /images/
daraus entfernt.
- Daher muss Ihr regulärer Ausdruck auch diesen Teil auslassen.
Weitere Informationen zur Verwendung von mod_rewrite finden Sie in der Dokumentation zu mod_rewrite
.
CGI-Beispiel
Schließlich können Sie eine .htaccess-Datei
verwenden, um die Ausführung von CGI-Programmen in einem bestimmten Verzeichnis zu erlauben.
- Dies lässt sich mit der folgenden Konfiguration realisieren:
Optionen +ExecCGI AddHandler cgi-script cgi pl
Wenn Sie möchten, dass alle Dateien in dem angegebenen Verzeichnis als CGI-Programme betrachtet werden, können Sie dies alternativ mit der folgenden Konfiguration erreichen:
Optionen +ExecCGI SetHandler cgi-script
Beachten Sie, dass AllowOverride Options
und AllowOverride FileInfo
beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben.
Im CGI-Tutorial finden Sie eine ausführlichere Beschreibung der CGI-Programmierung und -Konfiguration.
Fehlersuche
Wenn Sie Konfigurationsrichtlinien in eine .htaccess-Datei
einfü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 None
in Kraft ist. - Ein guter Test hierfür ist, Müll in Ihre
.htaccess-Datei
zu schreiben und die Seite neu zu laden. - Wenn kein Serverfehler generiert wird, dann haben Sie mit ziemlicher Sicherheit
AllowOverride None
in 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-Datei
verwendete 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 dass Sie 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.