.htaccess: Unterschied zwischen den Versionen

Aus Foxwiki
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
{| class="wikitable float"
!Verwandte Module
!Verwandte Richtlinien
|-
|
|
* <code>AccessFileName</code>
* <code>AllowOverride</code>
|}
''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 <code>.htaccess</code>, aber jeder Name kann in der Direktive <code>AccessFileName</code>angegeben werden
* Direktiven in <code>.htaccess-Dateien</code> gelten für das Verzeichnis, in dem Sie die Datei ablegen, sowie für alle Unterverzeichnisse
* Die <code>.htaccess-Dateien</code> folgen der gleichen Syntax wie die Hauptkonfigurationsdateien
* Da <code>.htaccess-Dateien</code> bei jeder Anfrage gelesen werden, sind Änderungen in diesen Dateien sofort wirksam
Um herauszufinden, welche Direktiven in <code>.htaccess-Dateien</code> platziert werden können, prüfen Sie den Kontext der Direktive
* Der Serveradministrator steuert weiter, welche Direktiven in <code>.htaccess-Dateien</code> platziert werden können, indem er die <code>AllowOverride-Direktive</code>in den Hauptkonfigurationsdateien konfiguriert
{| class="wikitable float"
{| class="wikitable float"
!Verwandte Module
!Verwandte Module
Zeile 14: Zeile 33:
* <code>mod_mime</code>
* <code>mod_mime</code>
|
|
* <code>ZugriffDateiname</code>
* <code>AccessFileName</code>
* <code>AllowOverride</code>
* <code>AllowOverride</code>
* <code>Optionen</code>
* <code>Optionen</code>
Zeile 26: Zeile 45:
|}
|}


Sie sollten die Verwendung von <code>.htaccess-Dateien</code> vollständig vermeiden, wenn Sie Zugriff auf die Konfigurationsdatei des httpd-Hauptservers haben.
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.
* 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.
* 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
<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
* 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 ===
=== .htaccess-Datei ===
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 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:
* Wenn Sie zum Beispiel die Datei lieber <code>.config</code> nennen möchten, können Sie Folgendes in Ihre Serverkonfigurationsdatei einfügen
  AccessFileName ".config"
  AccessFileName ".config"


Im Allgemeinen verwenden <code>.htaccess-Dateien</code> die gleiche Syntax wie die Hauptkonfigurationsdateien.
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.
* 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.
* 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 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>.
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.
* Sie müssen also mindestens <code>AllowOverride FileInfo</code> haben, damit diese Richtlinie in <code>.htaccess-Dateien</code> beachtet wird


; Beispiel
; Beispiel
Zeile 54: Zeile 72:
|}
|}


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".
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 ===
=== 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.
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.
* 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.
* 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.
* 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.
* 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.
<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
* 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>.
* 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
* 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.
* 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


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


<code>/.htaccess</code>
Es gibt zwei Hauptgründe, die Verwendung von . <code>htaccess-Dateien</code> zu vermeiden


<code>/www/.htaccess</code>
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


<code>/www/htdocs/.htaccess</code>
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.)


<code>/www/htdocs/example/.htaccess</code>
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).
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.
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.
* 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.
* Weitere Einzelheiten zu diesem Thema finden Sie im Rewrite-Leitfaden


Die zweite Überlegung ist eine Frage der Sicherheit.
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.
* 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.
* 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.
* 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.
* 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:
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>:
<code>.htaccess-Datei</code> in <code>/www/htdocs/example</code>


=== Inhalt der .htaccess-Datei in <code>/www/htdocs/example</code> ===
=== Inhalt der .htaccess-Datei in <code>/www/htdocs/example</code> ===
  AddTypetext/example ".exm"
  AddTypetext/example ".exm"


=== Abschnitt aus Ihrer <code>httpd.conf-Datei</code> ===
; Abschnitt aus Ihrer <code>httpd.conf-Datei</code>
  <Verzeichnis "/www/htdocs/example">
  <Verzeichnis "/www/htdocs/example">
  AddTypetext/example ".exm"
  AddTypetext/example ".exm"
  </Verzeichnis>
  </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:
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
  AllowOverride Keine
 
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 none


== Anwendung ==
== Anwendung ==
=== Richtlinien angewenden ===
=== 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.
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.
* 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.
* 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.
* 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.
* Und diese wiederum können Richtlinien überschreiben, die sich noch weiter oben oder in der Hauptkonfigurationsdatei des Servers selbst befinden


Beispiel:
; Beispiel
Im Verzeichnis <code>/www/htdocs/example1</code> befindet sich eine . <code>htaccess-Datei</code> mit folgendem Inhalt
Options +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</code> befindet sich eine . <code>htaccess-Datei</code> mit folgendem Inhalt:
Im Verzeichnis <code>/www/htdocs/example1/example2</code> haben wir eine <code>.htaccess-Datei</code>, die Folgendes enthält
  Optionen +ExecCGI
  Options Umfasst
(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).
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


Im Verzeichnis <code>/www/htdocs/example1/example2</code> haben wir eine <code>.htaccess-Datei</code>, die Folgendes enthält:
; Zusammenführung von .htaccess mit den Hauptkonfigurationsdateien
Optionen Umfasst
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
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.
* Diese Tatsache kann genutzt werden, um bestimmte Konfigurationen zu erzwingen, selbst wenn eine großzügige <code>AllowOverride-Einstellung</code> vorhanden ist


; Zusammenführung von .htaccess mit den Hauptkonfigurationsdateien
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
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">
  <Verzeichnis "/www/htdocs">
  AllowOverride All
  AllowOverride All
  </Verzeichnis>
  </Verzeichnis>
 
  <Ort "/">
  <Ort "/">
  Optionen +IncludesNoExec -ExecCGI
  Options +IncludesNoExec -ExecCGI
  </Ort>
  </Ort>
In diesem Beispiel wird davon ausgegangen, dass Ihr <code>DocumentRoot</code> <code>/www/htdocs</code> lautet.
 
In diesem Beispiel wird davon ausgegangen, dass Ihr <code>DocumentRoot</code> <code>/www/htdocs</code> lautet


=== Authentifizierung ===
=== Authentifizierung ===
Zeile 155: Zeile 174:


=== CGI ===
=== CGI ===
Schließlich können Sie eine <code>.htaccess-Datei</code> verwenden, um die Ausführung von CGI-Programmen in einem bestimmten Verzeichnis zu erlauben.
[[Common Gateway Interface]]
* 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 ===
=== 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.
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>
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


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.
Wenn Sie dagegen beim Zugriff auf Dokumente Serverfehler erhalten, überprüfen Sie Ihr httpd-Fehlerprotokoll
* Schauen Sie in der Dokumentation für die jeweilige Richtlinie nach, um festzustellen, was der Fall ist.
* Es wird Ihnen wahrscheinlich mitteilen, dass die in Ihrer <code>.htaccess-Datei</code> 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


Es kann aber auch sein, dass Sie einen Syntaxfehler bei der Verwendung der Richtlinie selbst haben.
Dies weist entweder darauf hin, dass Sie eine Direktive verwendet haben, die in <code>.htaccess-Dateien</code> niemals erlaubt ist, oder <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


<code>[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: Falsche Flaggenbegrenzer</code>
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.
In diesem Fall sollte sich die Fehlermeldung auf den jeweiligen Syntaxfehler beziehen, den Sie begangen haben


<noinclude>
<noinclude>


== Anhang ==
== Anhang ==

Aktuelle Version vom 3. November 2024, 11:16 Uhr

.htaccess - Datei zur Zugriffssteuerung

Beschreibung

Verwandte Module Verwandte Richtlinien
  • AccessFileName
  • AllowOverride

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 Direktive AccessFileNameangegeben werden
  • Direktiven in .htaccess-Dateien gelten für das Verzeichnis, in dem Sie die Datei ablegen, sowie für alle Unterverzeichnisse
  • Die .htaccess-Dateien folgen der gleichen Syntax wie die Hauptkonfigurationsdateien
  • Da .htaccess-Dateien bei 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-Dateien platziert werden können, indem er die AllowOverride-Direktivein den Hauptkonfigurationsdateien konfiguriert
Verwandte Module Verwandte Richtlinien
  • core
  • mod_authn_file
  • mod_authz_groupfile
  • mod_cgi
  • mod_include
  • mod_mime
  • AccessFileName
  • AllowOverride
  • Optionen
  • AddHandler
  • SetHandler
  • AuthType
  • AuthName
  • AuthUserFile
  • AuthGroupFile
  • Fordern Sie an.

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 einen Directory-Block setzen, 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 .config nennen 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 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 in AllowOverride stehen 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 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, dass mod_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 AllowOverrideso 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

  1. /.htaccess
  2. /www/.htaccess
  3. /www/htdocs/.htaccess
  4. /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-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-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

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-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 "/">
Options +IncludesNoExec -ExecCGI
</Ort>

In diesem Beispiel wird davon ausgegangen, dass Ihr DocumentRoot /www/htdocs lautet

Authentifizierung

Apache/HTTP/Passwortschutz

Server Side Includes

Apache/HTTP/Server Side Includes

Umschreibregeln

mod_rewrite

CGI

Common Gateway Interface

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 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 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
  1. https://httpd.apache.org/docs/current/en/howto/htaccess.html