Webserver/htaccess/Einstieg

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Text-Info

Lesedauer
20min
Schwierigkeitsgrad
mittel
Vorausgesetztes Wissen
Grundkenntnisse in
Webserver


Mit .htaccess-Dateien können Sie Daten mit Passwörtern zu schützen. Sie können aber auch ganze Benutzerkreise automatisch (ohne Passwortzugang) aussperren oder alle bis auf bestimmte aussperren. Sie können automatische Weiterleitungen einstellen oder eigene Regelungen für den Fall von HTTP-Fehlermeldungen schaffen. Sie können Optionen zum so genannten Verzeichnis-Browsing (Web-Browser ruft ein Verzeichnis auf, in dem keine Default-Datei wie z. B. index.htm liegt) einstellen. Sie können sogar abhängig von bestimmten Bedingungen alternative Inhalte anbieten, beispielsweise Webseiten mit unterschiedlichen Landessprachen abhängig von der Sprache des benutzten Web-Browsers – ohne PHP, ohne JavaScript.

Funktionsweise[Bearbeiten]

Dateien mit dem Namen .htaccess (das erste Zeichen ist ein Punkt) sind Bestandteile der Konfiguration des Webservers.

Die Arbeitsweise des Webservers wird mit Hilfe einer (oder mehrerer) zentraler Konfigurationsdatei(en) definiert – die httpd.conf. Doch diese liegt bzw. liegen 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 kann er dann in dem Verzeichnisbereich anlegen und bearbeiten, in dem sein Web-Angebot liegt. Dort, wo Sie Ihre HTML-Dateien, Grafikdateien usw. betreuen, können Sie also auch .htaccess-Dateien ablegen, falls Ihr Provider Ihnen diese Möglichkeit einräumt. Der Einsatz von .htaccess in Apache bedeutet, dass der Webserver bei jedem einzelnen Seitenzugriff vom angeforderten Dokument aus rekursiv sämtliche Verzeichnisse überprüfen muss, ob irgendwo eine solche Datei liegt. 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.

Wie heißt eigentlich die .htaccess-Datei?[Bearbeiten]

Ganz allgemein gesagt: So, wie der Webmaster sie in der Direktive AccessFileName genannt hat. 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).

.htaccess ist lediglich der voreingestellte Defaultwert in der Apache-Konfiguration.

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.

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.

Geht das auch auf meiner Homepage?[Bearbeiten]

Das kommt auf die Konfiguration des Webservers an.

Das Konzept von .htaccess bedeutet, dass der Webmaster einen Teil seiner Kontrollmöglichkeiten an einen Benutzer abtritt. Bei den Massenanbietern von Homepages ist generell kaum zu erwarten, dass sie dazu bereit sind – und sei es nur aus Angst, einem Benutzer versehentlich das Recht zu geben, etwas zu tun, was ihren Betrieb mit tausenden von Homepages lahmlegen könnte.

Der Webmaster müsste auf jeden Fall wissen, was er tut – oder er müsste dem Anwender vertrauen. Deshalb wird eine Fähigkeit wie .htaccess vermutlich nur in den etwas teureren Paketen an Web-Speicher enthalten sein – was schade ist, denn wenn man das als Webmaster einmal richtig eingerichtet hat, könnten tausende von Benutzern davon profitieren.

Da bei bestimmten Einstellungen der Server-Konfiguration automatisch .htaccess-Dateien in übergeordneten Verzeichnissen mit geprüft werden müssen, könnte das Ganze bei wirklich hohen Zugriffszahlen auch eine Performance-Frage werden. Auch hier ist der Server für den Massenbetrieb der wahrscheinlichste Kandidat dafür, so eine Fähigkeit nicht anzubieten.

Falls der Provider tatsächlich einen solchen Service anbietet, dann sollte er auch angeben, welche der vielen Features von .htaccess er freigeschaltet hat.

Abschließend ist ggf. noch zu beachten, dass der Name .htaccess in der Konfiguration des Webservers einstellbar ist. Im Zweifelsfalle also den Provider nach dem Namen der Datei fragen.

Erste Schritte[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[Bearbeiten]

Um .htaccess-Dateien einsetzen zu können, müssen die 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[Bearbeiten]

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

  • Zugangskontrolle, wie im Artikel beschrieben (Freigabe der Kommandos allow, deny und order).
  • 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änigen 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[Bearbeiten]

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.