Konfiguration auf Verzeichnisebene mittels .htaccess

Authentifizierung mit .htaccessDer Apache-Webserver wird normalerweise über die httpd.conf konfiguriert. Wenn man sich den Server noch mit anderen Kunden teilt, wie es bei günstigen Hosting-Angeboten eigentlich immer der Fall ist, hat man normalerweise keinen Zugriff auf diese Datei. Eine aussichtslose Situation? Nein, denn hier kommen .htaccess-Dateien ins Spiel. Mit einer .htaccess-Datei lassen sich einige Apache-Einstellungen für das Verzeichnis (und dessen Unterverzeichnisse) in der sie liegt überschreiben. Welche Einstellungen getätigt werden können, ist von Anbieter zu Anbieter verschieden.

Meistens ist es möglich für Verzeichnisse/Dateien einen Kennwort-Schutz zu versehen, individuelle Fehler-Seiten zu definieren oder die Besucher u.U. weiterzuleiten. Viele Anbieter ermöglichen es auch, über .htaccess-Dateien zwischen verschiedenen PHP-Versionen hin- und her zu wechseln.

Wie funktionieren .htaccess-Dateien?

Für die Apache-Konfiguration gibt es eine Direktive namens AllowOverride, mit der festgelegt werden kann, ob es möglich ist bestimmte Einstellungen mittels .htaccess-Dateien zu überschreiben, und wenn ja, welche Einstellungen überschrieben werden können. Diese Direktive wird im Verzeichnis-Kontext (<Directory> … </Directory>) verwendet, man kann .htaccess-Dateien also für bestimmte Verzeichnisse erlauben, oder verbieten.

Ist die Benutzung von .htaccess-Dateien erlaubt, sucht der Apache bei jedem Seitenaufruf nach einer solchen Datei. Dabei werden auch übergeordnete Verzeichnisse durchsucht.

Ein Beispiel: Der Benutzer ruft die Seite www.meineseite.example/anleitungen/programmierung/php/klassen.php auf. Apache sucht dann nach folgenden .htaccess-Dateien:

/var/www/htdocs/.htaccess
/var/www/htdocs/anleitungen/.htaccess
/var/www/htdocs/anleitungen/programmierung/.htaccess
/var/www/htdocs/anleitungen/programmierung/php/.htaccess

Dabei überschreiben Einstellungen in der untersten .htacess-Datei die der Dateien in den übergeordneten Verzeichnissen. Man muss dabei beachten, dass der Apache bei jedem Aufruf nach .htaccess-Dateien sucht, wenn deren Benutzung mittels AllowOverride erlaubt ist. Im Falle des Beispiels wären das 4 zusätzliche Datei-Aufrufe pro Seitenaufruf, wodurch das Ausliefern der Seite länger dauert, bzw. der Server mehr belastet wird. Wenn also die Möglichkeit besteht die Einstellungen direkt in die httpd.conf einzutragen, sollte man das tun, und AllowOverride abschalten.

Wie werden Einstellungen in die .htaccess eingetragen?

Wenn man für ein bestimmtes Verzeichnis eine Einstellung verändern möchte, tut man das normalerweise wie folgt:

httpf.conf

<Directory /forum/>
    DirectoryIndex forumindex.php
</Directory>

In einer .htaccess-Datei kann man sich die <Directory>-Zeilen sparen, die Einstellungen gelten immer für das Verzeichnis in dem die .htaccess liegt, sowie für darunterliegende Verzeichnisse (Unterverzeichnisse).

/forum/.htaccess:

DirectoryIndex forumindex.php

Kennwort-Schutz

Mit ein paar Einträgen in der .htaccess/Apache-Konfiguration lässt sich ein Kennwort-Schutz für bestimmte Verzeichnisse einstellen. Es gibt mehrere Möglichkeiten, einen Kennwort-Schutz zu realisieren. Es muss festgelegt werden, wo der Apache die Zugangsdaten findet (z.B. in einer Datei), wer sich anmelden darf, und wie die Anmeldung vonstatten geht.

Ein Beispiel

AuthType Basic
AuthName "Dieser Bereich der Webseite ist Kennwort-geschuetzt."
AuthBasicProvider file
AuthUserFile /var/www/kennwoerter/geschuetzter_bereich
Require valid-user

Der AuthType gibt an, wie die Anmeldung abgewickelt wird. Dabei gibt es zwei Möglichkeiten: Basic und Digest. Bei der Basic-Authentifizierung wird das Kennwort allerdings unverschlüsselt (außer man verwendet SSL) vom Browser zum Server übertragen. Das Digest-Verfahren ist sicherer, dabei werden Kennwort und Benutzername verschlüsselt übertragen. Der Nachteil des Digest-Verfahrens ist, das es von einigen sehr alten Browsern nicht unterstützt wird.

AuthName ist der Name des geschützten Bereichs. Der Benutzer gibt das Kennwort ein, und darf danach alle Dateien/Verzeichnisse sehen, die in einem geschützten Bereich mit diesem Namen liegen. Die Zugangsdaten müssen nur einmal eingegeben werden, der Browser merkt sich die Zugangsdaten für jeden Namen. Außerdem wird dieser Name normalerweise vom Browser bei der Abfrage der Zugangsdaten angezeigt.

AuthBasicProvider gibt an, woher die Zugangsdaten kommen, in diesem Fall aus einer Datei (file). Es ist beispielsweise auch möglich die Zugangsdaten aus einer Datenbank auszulesen.

AuthUserFile ist der Pfad zu der Datei, in welcher die Kennwörter stehen.

Require legt die Bedingungen für das Anmelden fest, in diesem Fall: Nur Benutzer die in der Zugangsdaten-Datei stehen, dürfen sich anmelden. Es ist auch möglich hier bestimmte Benutzernamen/gruppen anzugeben, oder vorauszusetzen, das der Benutzer eine bestimmte IP-Adresse/Bereich hat (oder Bereiche auszuschließen).

Damit dieses Beispiel funktioniert, muss die Zugangsdaten-Datei allerdings erst angelegt werden.

Zugangsdaten-Datei anlegen

Diese Datei legt man am besten in einem Verzeichnis ab, das außerhalb des Dokumenten-Verzeichnisses (htdocs) des Webservers liegt, so das Besucher der Webseite keine Möglichkeit haben, darauf zuzugreifen. Zum anlegen der Datei kann man das Programm htpasswd verwenden, das normalerweise mit dem Apache mitinstalliert wird. Wenn man kein Linux-System hat, und nicht direkt (Kommandozeile) auf den Server zugreifen kann, wie es bei Webspace-Angeboten der Fall ist, kann man auch einen der vielen htpasswd-Generatoren verwenden.

htpasswd-Generator (Online)

Einen htpasswd-Generator gibt es beispielsweise auf htaccesstools.org. Dort trägt man einfach den gewünschten Benutzernamen und das Kennwort ein, und klickt auf Create .htpasswd file. Man erhält eine Zeile, die ungefähr so aussieht:

benutzername:$apr1$VzN.1...$l/wL1UTXqvxjfU6av4zcw1

Diese trägt man nun in die Datei an die per AuthUserFile angegeben ist. Hat man mehrere Benutzer, sollte man darauf achten, das für jede Benutzer/Kennwort-Kombination eine neue Zeile verwendet wird.

htpasswd

Mit dem htpasswd-Werkzeug ist es etwas einfacher.

htpasswd -c <Pfad> <Benutzername>

Obiges Kommando erstellt eine neue Zugangsdaten-Datei und speichert sie unter <Pfad> ab. Gleichzeitig wird der erste Benutzer namens <Benutzername> erstellt.
Neue Kennwortdatei
Mittels htpasswd können auch problemlos weitere Benutzer hinzugefügt werden.

htpasswd <Pfad zur Datei> <Benutzername>

(ohne -c)

Die Kennwort-Abfrage

Wenn alles geklappt hat, sollte sich solch ein Fenster beim Aufrufen einer Datei innerhalb des geschützten Verzeichnisses öffnen.
Authentifizierung erforderlich
Das ist wirklich nur eine sehr simple Kennwort-Abfrage, der Apache kann noch mehr. Man kann das (sicherere) Digest-Verfahren verwenden, die Zugangsdaten aus einer Datenbank auslesen, etc. Aber das würde den Rahmen dieses Artikels sprengen, daher verweise ich auf die gute (aber englische) Apache-Dokumentation.

Individuelle Fehler-Seiten

404 - Nicht gefundenWenn ein Fehler auftritt, beispielsweise die angeforderte Seite nicht gefunden wurde (404), gibt der Apache normalerweise eine weiße Seite mit dem Fehlercode und einem kurzen Text aus. Mit der ErrorDocument-Direktive kann man dafür sorgen, dass der Besucher in diesem Fall beispielsweise auf die Startseite weitergeleitet wird, oder man kann eine selbst gestaltete Fehlerseite anzeigen lassen.

ErrorDocument <Code> <Fehlermeldung oder URL>

Die Syntax der ErrorDocument-Direktive ist simpel: Der Code gibt an, für welchen HTTP-Statuscode die Direktive gilt, und darauf folgt entweder eine benutzerdefinierte Fehlermeldung, oder die URL des Dokuments, welches bei einem Fehler ausgegeben wird. Auch externe URLs können angegeben werden, wenn man den Besucher auf eine andere Webseite weiterleiten möchte.

ErrorDocument 404 /fehlermeldungen/404.html
ErrorDocument 410 "Wer zu spät kommt..."
ErrorDocument 404 http://www.google.de

Mehr Informationen zu dieser Direktive finden sich in der Apache-Dokumentation.

Anfragen umleiten

Wenn mod_rewrite installiert ist, ist es auch möglich, die aufgerufene Adresse intern “umzuschreiben”, also eine ganz andere Seite auszuliefern, ohne das der Besucher davon etwas merkt. So können zum Beispiel sprechende URLs erstellt werden.

# mod_rewrite aktivieren
RewriteEngine on
 
# Optional
RewriteCond <Bedingung>
 
# Umleitung
RewriteRule <Suchmuster> <Ziel> <Optionen>

RewriteEngine on aktiviert mod_rewrite. Mit RewriteRule lassen sich Regeln festlegen, nach denen Besucher umgeleitet werden. Das Suchmuster ist ein regulärer Ausdruck, Ziel ist die Datei/URL die der Besucher in Wirklichkeit zu sehen bekommt. Außerdem lassen sich noch weitere Optionen festlegen. Mit RewriteCond lassen sich zusätzlich weitere Bedingungen, wie beispielsweise eine bestimmte IP-Adresse, festlegen.

Wenn ein Besucher die Seite aufruft, wird überprüft ob das Suchmuster auf die angeforderte Adresse passt, ist das der Fall, wird die <Ziel>-Seite ausgeliefert. Wenn kein Suchmuster passt, macht mod_rewrite nichts, und der Apache versucht einfach die angeforderte Seite auszuliefern.

Beispiel:

RewriteEngine on
RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

Wenn der Besucher www.webseite.example/seite_123.html aufruft, bekommt er in Wirklichkeit den Inhalt von www.webseite.example/seite.php?id=123 zu sehen.

Mehr zum Thema mod_rewrite kann man bei SelfHTML nachlesen.

Startseite festlegen

Mit der DirectoryIndex-Direktive lässt sich festlegen, welche Seite die Startseite eines Verzeichnisses ist, also aufgerufen wird, wenn der Besucher ein Verzeichnis aufruft. Damit lässt sich auch festlegen, welche Datei aufgerufen wird, wenn der Besucher nur die Domain eintippt.

DirectoryIndex startseite.html index.php index.html

Wenn jetzt ein Verzeichnis, in dem die .htaccess gilt, direkt aufgerufen wird, beispielsweise www.antusblog.de/demos/, dann wird der Apache versuchen /demos/startseite.html auszuliefern. Wenn er die Datei nicht findet, sucht er nach index.php und dann nach index.html. Findet er keine Datei, gibt er entweder eine Liste aller Dateien in dem Verzeichnis aus (vorausgesetzt: Options +Indexes), oder eine Fehlermeldung.

Ich hoffe, ich konnte euch einen kleinen Überblick darüber geben, wie .htaccess-Dateien funktionieren, und was damit möglich ist. Neben den hier besprochenen Funktionen gibt es allerdings noch viele weitere.

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung bis jetzt)
Loading ... Loading ...
Kategorie: Allgemeines
Ansichten: 2,058

Kommentare

Keine Kommentare bis jetzt.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu