Webserver/htaccess

Aus SELFHTML-Wiki
< Webserver(Weitergeleitet von AllowOverride)
Wechseln zu: Navigation, Suche
Htaccess-icon.svg
Die .htaccess-Datei (englisch hypertext access „Hypertext-Zugriff“) ist eine Konfigurationsdatei auf NCSA-kompatiblen Webservern wie dem vor allem bei Shared-Hosting weit verbreiteten Apache. Sie erlaubt sehr weitreichende Einstellungen und Vorgaben für verzeichnisbezogene Regeln.

So können Sie …

  • automatische Weiterleitungen einstellen
  • Daten mit Passwörtern schützen
  • aber auch ganze oder nur bestimmte Benutzerkreise automatisch aussperren.
  • eigene Regelungen für den Fall von HTTP-Fehlermeldungen schaffen.
  • Optionen zum so genannten Verzeichnis-Browsing einstellen
  • und sogar abhängig von bestimmten Bedingungen alternative Inhalte z. B. abhängig von der Sprache des benutzten Web-Browsers anbieten – ohne PHP, ohne JavaScript.
  1. Funktionsweise
    • .htaccess aktivieren
    • AllowOverride
  2. Umleitungen mit mod rewrite
    • RewriteEngine - Umleitungen bestimmen
    • RewriteCond - Bedingungen definieren
    • RewriteRule
  3. Zugriffskontrolle
  4. Fehlermeldungen
    • 404 - lokale Fehlerseite
  5. Verzeichnisoptionen
  6. alternative Inhalte
    • Sprachauswahl mit Multiview




Funktionsweise

Dateien mit dem Namen .htaccess (das erste Zeichen ist ein Punkt) sind Bestandteile der Konfiguration apachoider Webserver. Dabei liegt/liegen eine (oder mehrere) zentrale Konfigurationsdatei(en) – die httpd.conf - normalerweise innerhalb des Programmverzeichnisses des Webservers selbst, worauf Benutzer, die ein Web-Projekt verwalten, in aller Regel keinen Zugriff erhalten.

Der Server-Administrator legt in dieser zentralen Konfiguration fest, welche Berechtigungen er welchen Benutzern oder auch welchen Webangeboten (virtuellen Hosts) zugestehen möchte. Nur dann, wenn ein Benutzer das Recht erhalten soll, die Vorgaben aus der zentralen Konfiguration zu überschreiben und individuell neu festzulegen, wird ihm die Nutzung von .htaccess-Dateien erlaubt.

.htaccess-Dateien können in allen Verzeichnissen, in denen HTML-Dateien, Grafikdateien usw. liegen, abgelegt werden, betreuen, falls Ihr Provider Ihnen diese Möglichkeit einräumt.

Der Apache-Webserver überprüft bei jedem einzelnen Seitenzugriff vom angeforderten Dokument aus rekursiv sämtliche Verzeichnisse, ob irgendwo eine solche Datei liegt. Im Allgemeinen gilt jeweils die letzte ermittelte Anweisung. Und diese Information darf er nicht zwischenspeichern – denn die von .htaccess-Dateien konfigurierten Servereinstellungen sollen unmittelbar in demselben Moment gültig sein, in dem die .htaccess-Datei existiert, ohne Server-Neustart. Die Dezentralisierung der Konfiguration kostet also auch etwas Rechnerleistung.

Mittlerweile erlauben selbst kostenlose Hoster oft den Einsatz von .htaccess-Dateien.

Empfehlung: Kontaktieren Sie Ihren Provider, …
  1. ob ein Einsatz von .htaccess-Dateien möglich ist.
  2. welche Namenskonventionen zu berücksichtigen sind.

Wie heißt eigentlich die .htaccess-Datei?

Ganz allgemein gesagt: So, wie der Webmaster sie in der Direktive AccessFileName in der Hauptkonfiguration festgelegt hat.

.htaccess ist lediglich der voreingestellte Defaultwert in der Apache-Konfiguration. Außerdem legt der Webserver in der Hauptkonfiguration fest, wie Dateinamen beginnen, die per HTTP/s keinesfalls an den Client ausgeliefert werden sollen, auch wenn dieser explizit danach fragt. Als Konvention hat sich hier .ht eingebürgert.

Dass der Name .htaccess mit einem Punkt beginnt, ist eine Tradition aus der Unix-Welt. Dort beginnen viele verzeichnisspezifische Konfigurationsdateien mit einem Punkt, wodurch sie als „versteckt“ gekennzeichnet werden.

Vielleicht ist es gar nicht erwünscht, dass der Name einer so wichtigen Datei mit einem Punkt beginnt, also bei bestimmten Verzeichnislisten auf UNIX-Servern ggf. gar nicht angezeigt wird, wenn man etwa beim UNIX-Kommando ls nicht explizit den Operand -a angibt (wie das manche FTP-Clients tun).

Setzen Sie zur Verwaltung Ihres Webangebots einen grafischen FTP-Client ein, kann es Ihnen daher passieren, dass eine .htaccess-Datei, die Sie gerade hochgeladen haben, plötzlich nicht mehr zu existieren scheint.

.htaccess-Datei bearbeiten

.htaccess-Dateien sind reine Textdateien, die mit einem Texteditor bearbeitet werden können. Mit einem SSH-Zugang können Sie solche Dateien direkt auf dem Server erstellen und bearbeiten, indem Sie dort einen geeigneten Texteditor aufrufen (auf Unix-Systemen z. B. den vi-Editor).

Wenn Sie nur FTP-Zugang zu dem Server-Rechner haben, können Sie eine solche Datei auf Ihrem lokalen PC mit einem Texteditor erstellen und dann hochladen. Auf einem Windows-System dürfen Sie allerdings solche Dateinamen, die mit einem Punkt beginnen, nicht unmittelbar vergeben, da Windows den Punkt anders versteht. Sie müssen in Ihrem Texteditor die Option "Speichern unter" wählen und darauf achten, dass der Editor nicht selbständig aus diesem Namen den Dateinamen .htaccess.txt macht.

Achtung!

Der Webserver ist (im Vergleich mit einem fehlertoleranten Browser) sehr empfindlich in Bezug auf die Syntax und deren korrekte Schreibweise. Der kleinste Fehler führt in der Regel zu einem Server Error 500.
  • Speichern Sie vor Ihren ersten Schritten ein Backup der bestehenden .htaccess-Datei. So können Sie mit der Originaldatei jederzeit den ursprünglichen Zustand wieder herstellen.
  • Testen Sie nach jeder Änderung an der .htaccess Datei, ob die Webseite noch aufgerufen werden kann, da diese Fehler nicht protokolliert werden.

.htaccess-Dateien gelten stets für das Verzeichnis, in dem sie abgespeichert werden, sowie für alle Unterverzeichnisse davon und für deren Unterverzeichnisse. Wenn Sie in einem der Unterverzeichnisse andere Regelungen wünschen, müssen Sie dort wiederum eine .htaccess-Datei ablegen. Die Angaben der jeweils aktuellen Datei überschreiben die Angaben von .htaccess-Dateien aus darüberliegenden Verzeichnissen.

Empfehlung: Denken Sie aber daran, dass es in jedem Verzeichnis nur eine einzige .htaccess-Datei geben kann, in der Sie alles das notieren müssen, was Sie konfigurieren wollen. Zur Strukturierung und damit besseren Lesbarkeit für Sie empfiehlt sich der sparsame Einsatz einiger weniger Kommentarzeilen.

.htaccess freischalten

Um .htaccess-Dateien einsetzen zu können, müssen diese erst in der httpd.conf-Konfigurations-Datei aktiviert oder erlaubt werden. Setzen Sie sich bitte mit Ihrem Provider bzw. Webmaster in Verbindung – oder wenn Sie einen lokal installierten Apache nutzen, ändern Sie die httpd.conf.

AllowOverride

Das Kommando der (als Beispiel verwendeten) Apache-Konfiguration, welches den Funktionsumfang einer .htaccess-Datei regelt, heißt AllowOverride. Hierbei kann der Webmaster eine beliebige Teilmenge der folgenden Schlüsselworte angeben. Jedes Schlüsselwort schaltet die gesamte Gruppe an Rechten für die Verwendung in .htaccess-Dateien frei.

Da das Kommando zur Definition der Rechte eines URL-Baums gehört, kann man in verschiedenen URL-Bäumen problemlos unterschiedlich viele .htaccess-Rechte für seine Anwender freischalten.

AuthConfig

  • Definition einer Berechtigungsstruktur, wie im Artikel beschrieben (Definition von Realms, Benutzer- und Passwortdateien sowie Anforderungen für die Authentifizierung). Bewirkt erst zusammen mit Limit die gewünschten Mechanismen.

FileInfo

  • Eigene Definition von MIME-Typen und deren Abbildungen auf Datei-Endungen,
  • bedingte Verwendung sprachspezifischer Varianten von HTML-Dokumenten,
  • Definition von Dokumenten als Reaktion auf http-Fehlercodes.
  • Natürlich wäre CGI-Fähigkeit gerade im Zusammenhang mit der Definition von Fehlerdokumenten schön, weil man dann über eine CGI-Anwendung die entsprechenden Zugriffe protokollieren lassen könnte ... aber statt dessen kann der Provider dem Anwender auch einen Auszug aus den zentralen Log-Dateien anbieten, was ihm die Vergabe des (gefährlichen) CGI-Rechtes erspart.

Indexes

  • Feineinstellung für intelligentes directory browsing, falls solches erlaubt ist:
  • selbst definierbare Icons für Dateitypen
  • eigene Beschreibungstexte für MIME-Typen
  • Definition des Namens der Indexdatei (index.html etc.)
  • automatische Kopf- und Fußzeilen-Includedateien für directory-browsing
  • Liste von nicht anzuzeigenden Dateien (regular expressions!)

Mit geeigneten Einstellungen kann man ganz ohne eigene HTML-Dokumente eine halbwegs komfortable Navigationsfunktion allein über die directory-browsing-Funktion des Webservers organisieren, die dennoch individuell aussieht.

Limit

  • Limit alleine ohne AuthConfig erlaubt die Zugangsbeschränkung auf Verzeichnisse nur anhand von durch den Webmaster vordefinierten Rechtestrukturen, nicht aber z. B. die Definition eigener Benutzerkennungen.

Options

  • XBitHack – damit kann man eine Art selbstprogrammierbarer Variante von SSI erzeugen
  • Options – damit kann man Optionen für das Verhalten des Verzeichnisses setzen, und zwar:
  • Indexes – erlaubt die Verwendung oder Abschaltung von directory browsing (ansonsten gilt einfach die zentrale Voreinstellung des Servers).
  • ExecCGI – erlaubt die Definition eigener CGI-Verzeichnisse.
  • Includes – erlaubt die Verwendung oder Abschaltung von Server Side Includes im vollen Umfang (inklusive ExecCGI!).
  • IncludesNoCGI - erlaubt die Verwendung oder Abschaltung von Server Side Includes im beschränktem Umfang (ohne ExecCGI!).
  • MultiViews – erlaubt die Verwendung oder Abschaltung von dynamischen sprachabhängigen Dokumenten.
  • SymLinks – erlaubt die Verwendung von symbolic links als Verweise auf Dokumente in anderen Verzeichnissen. Elegant, falls man auf Objekte zeigen will, die außerhalb des URL-Baums liegen (z. B. Protokolldateien des Webservers), unterläuft aber damit ggf. bewusst das Verbergen solcher Objekte durch eben diesen URL-Baum.
  • SymLinksIfOwnerMatch – eingeschränkte Version, erlaubt nur den Verweis auf Objekte derselben Benutzerkennung. Das hier ist die Einstellung, bei welcher der Webmaster wirklich aufpassen muss und besser erst mal nur die entsprechenden Rechte in seiner zentralen Konfiguration definieren sollte (IncludesNoCGI für sich genommen ist ungefährlich und sehr nützlich!).

Im einzelnen gibt es dafür folgende mögliche Werte:

  • AllowOverride None weist Webserver an, .htaccess-Dateien zu ignorieren. Das ist im Übrigen die Voreinstellung.
  • AllowOverride All legt fest, dass in einer .htaccess-Datei (so gut wie) sämtliche zentrale Vorgaben überschrieben und damit abgeändert werden dürfen. Das kann bedeuten, dass Vorhaben, die eigentlich verboten sind (beispielsweise die Ausführung von CGI-Scripts), mit Hilfe einer .htaccess-Datei erlaubt werden. Als Server-Administrator werden Sie diese Anweisung also nur sehr vorsichtig einsetzen.
  • AllowOverride Options legt fest, dass in einer .htaccess-Datei Anweisungen zur Steuerung spezieller Verzeichniseigenschaften zulässig sind.
  • AllowOverride Limit legt fest, dass in einer .htaccess-Datei Zugriffe von bestimmten Hosts erlaubt oder untersagt werden können.
  • AllowOverride Indexes legt fest, dass in einer .htaccess-Datei Anweisungen zur Steuerung von Verzeichnisindizes zulässig sind.
  • AllowOverride FileInfo legt fest, dass in einer .htaccess-Datei Anweisungen zur Akzeptanz bestimmter Dokumenttypen zulässig sind - beispielsweie, um Individuelle Fehlermeldungen ausgeben zu können.
  • AllowOverride AuthConfig legt fest, dass in einer .htaccess-Datei Autorisierungsanweisungen stehen dürfen - das betrifft beispielsweise Regelungen zum Passwortschutz.


Diese Werte können auch miteinander kombiniert werden. All ist der mächtigste Parameter, mit dem alles das zugelassen wird, was die anderen Parameter steuern.

Wenn man einem Benutzer erlaubt, diese Optionen selbst zu setzen, dann kann dieser alles aus dieser Liste selbst einstellen! Das ist sehr schade, denn es verhindert auch die Freigabe der ungefährlichen Rechte an alle Benutzer (etwa die Entscheidung, ob man directory browsing will oder nicht) und zwingt den Webmaster dazu, dies in seiner zentralen Konfiguration ggf. für verschiedene Benutzer selbst unterschiedlich zu definieren.


Erlaubte Anweisungen in .htaccess-Dateien

Sie können in einer .htaccess-Datei genau dieselben Anweisungen notieren, die in der zentralen Konfigurationsdatei Verwendung finden – mit nur wenigen Ausnahmen. Beispielsweise dürfen Sie keine zusätzlichen Module laden, den Servernamen nicht ändern und keinen zusätzlichen Speicherplatz (DocumentRoot) anfordern. Auch <Directory ...>-Container sind generell in so einer dezentralen Konfigurationsdatei ebensowenig zulässig wie Festlegungen für neue virtuelle Hosts.


Trotz dieser prinzipiell vielfältigen Möglichkeiten kann es aber teilweise drastische Einschränkungen geben. Welche Anweisungen Ihnen tatsächlich zur Verfügung stehen, hängt davon ab, wie weitgehend die Rechte sind, die Ihnen der Server-Administrator mit Hilfe der Anweisung AllowOverride in der zentralen Konfigurationsdatei einräumt.

Beachten Sie: Die Anweisung AllowOverride kann nicht innerhalb einer .htaccess notiert werden, sondern wird ausschließlich vom Server-Administrator in der zentralen Konfigurationsdatei vorgegeben. Um den AllowOverride-Wert in Erfahrung zu bringen, benötigen Sie Einsicht in die Serverkonfiguration. Kontaktieren Sie dazu gegebenenfalls Ihren Webhosting-Provider. Dieser kann den Wert auch ändern, falls Sie bestimmte bisher nicht erlaubte Anweisungen verwenden möchten.



Weblinks