.htaccess

Was ist .htaccess?

Die .htaccess ist eine Konfigurationsdatei mit der man Einstellungen für Verzeichnisse, Datein u.v.m auf einem Apache-Webserver vornehmen kann. Unter anderem kann man hiermit einen Verzeichnisschutz oder Zugriffsschutz für bestimmte Dateien/Verzeichnisse realisieren. Auch ist es möglich in dieser Datei Fehlerseiten festzulegen, IP-Adressen und bestimmte User-Agents(Bots, Browser) zu sperren.

Zu beachten ist hier, dass man in der httpd.conf den Namen einer solchen Konfigurationsdatei auch ändern kann! Es kann also je nach Hoster/Konfiguration auch .config oder anders heißen! In der Regel ist dies aber nicht der Fall. .htaccess hat sich im Laufe der Jahre durchgesetzt.

Außerdem kann es gut möglich sein, dass nicht alle unten aufgeführten Einstellungen funktionieren! Auch hier kommt die httpd.conf wieder zum Einsatz. In ihr kann der Webmaster ohne Probleme gewisse Optionen aus- und anschalten

Warum beginnt der Dateiname mit einem Punkt?

Das ist übernommen aus der UNIX-Welt. Dort werden Konfigurationsdateien mit einem Punkt als versteckt gekennzeichnet. Bei manchen FTP-Clients kann es daher sein, das eine hochgeladene .htaccess-Datei nicht zu sehen ist. Hier sollte man sich die versteckten Dateien anzeigen lassen.

Eine .htaccess Datei lässt sich mit jedem normalen Texteditor erstellen.

Wo gelten die Regeln einer .htaccess-Datei?

Diese gelten immer in dem Verzeichnis, in welchem die .htaccess selbst liegt und für sämtliche Unterverzeichnisse. Liegt also die Datei unter /web/ dann gelten ihre Regelungen sowohl für /web/page/ als auch für /web/page/images/ usw.! Möchte man in einem Unterverzeichnis eine andere Konfiguration, so legt man in dieses auch eine andere .htaccess-Datei.

Wie schütze ich ein Verzeichnis?

Das ist ganz einfach. Du musst nur eine .htaccess-Datei und eine .htpasswd-Datei(wie .htaccess, kann unterschiedlich sein) erstellen. In die .htaccess müssen folgende Anweisungen hinein:

AuthType Basic/Digest

Mit der Eigenschaft AuthType legt man die Art und Weise der Authentifizierung fest. Das geht einmal mit Basic und einmal mit Digest. Mit Basic werden die Daten ganz normal über das HTTP-Protokoll übertragen. Dabei wird das Passwort unverschlüsselt an den Webserver gesendet.

Wer es lieber sicher mag, benutzt Digest. Hierbei wird das Passwort vom Browser verschlüsselt abgesendet.

Achtung: Die Digest-Variante funktioniert nicht mit allen Browsern! Wer es also mit vielen verschiedenen Anwendern und unterschiedlichen Browsern zu tun hat, sollte darauf vielleicht verzichten!

AuthUserFile pfad

Mit der Eigenschaft AuthUserFile legt man den Pfad zu der Datei fest, in welcher die Benutzernamen und Passwörter gespeichert sind. Es muss der absolute Pfadname angegeben werden!

Am besten fragt man seinen Webmaster, wenn man den absouluten Pfadnamen nicht kennt. Mit diesem PHP-Code bekommt man allerdings auch den absoluten Pfad heraus(Achtung: Das PHP-Skript muss in dem selben Verzeichnis wie die .htaccess liegen, sonst stimmt der Pfad nicht!):

<?php echo "Absoluter Pfadname: ".getcwd(); ?>

An den Pfadnamen muss man jetzt nur noch "/.htpasswd" anhängen.

AuthName "Text"

Mit dieser Eigenschaft kann man einen Titel für das Authentifizierungs-Fenster des Browsers festlegen.

Require Datei

Mit der Eigenschaft Require legt man die einzelnen Benutzernamen fest, welche sich anmelden dürfen. Wem das zu aufwendig ist, der kann auch einfach require valid-user angeben. Jetzt dürfen sich alle User, welche in der .htpasswd zu finden sind, anmelden.

Beispiel für eine .htaccess-Datei:
#Das hier ist ein Kommentar
AuthType Basic
AuthUserFile /server/ordner/webseite/.htpasswd
AuthName "Mitglieder-Bereich"
Require valid-user
Beispiel für eine .htpasswd-Datei:

In dieser Datei werden die Benutzernamen und die dazu gehörigen Passwörter gespeichert. Ihr Aufbau ist an ganz einfach:

Benutzernamen:Verschl.Passwort

Das Passwort muss verschlüsselt angegeben werden. Hierfür verwendet man die MD5-Verschlüssekung Um ganz schnell und einfach ein Passwort per MD5-Verfahren zu verschlüsseln hilft dieser kleine PHP-Code:

<?php $pass = 'test'; // Das Passwort hier eingeben
echo(md5($pass)); // Ausgabe
?>

Wie schützt man einzelne Dateien?

Um nun ganz speziell nur einige Dateien zu schützen, fügt man folgenden Code ein:

<Files *.html> Require valid-user # Alle User der .htpasswd-Datei dürfen auf alle HTML-Dateien zugreifen </Files>

Dieser schützt alle HTML-Dateien. Du kannst aber auch nur einzelne Dateien schützen:

<Files index.html> Require user ferenc # Nur der User ferenc darf auf die index.html zugreifen </Files>

Eine weitere Möglichkeit:

<Files *.jpg> Deny from all # Niemand darf auf die JPGs zugreifen </Files>

Einzelne IP-Adressen sperren:

Man kann nicht nur einzelne IP-Adressen sperren, sondern auch nur speziellen den Zugriff gewähren. Dazu einfach folgendes in die .htaccess eintragen:

order

Mit order legst du fest, ob du zuerst die zu sperrenden IPs festgelegst oder die Zugelassenen. Dabei gibt es zwei Möglichkeiten:

order deny,allow # erst kommen die Verbote

oder:

order allow,deny # erst kommen die zu gelassenen IPs, etc.

deny from und allow from

Mit deny from oder allow from leitest du das Verbot/die Erlaubnis zum Zugriff einer bestimmten IP-Adresse ein. Neben IPs und IP-Bereichen kannst du auch noch Domainnamen zum sperren angeben. Beispiel:

order deny,allow
deny from example.org
deny from 127. # Zugriffe aller IPs mit 127.xyz.xyz.xyz blocken
allow from 127.0.0.2 # gewährt der IP xy Zugriff

Daneben gibt es auch noch eine Kurzschreibweise, um den Zugriff für alle zu verbieten/erlauben. Diese lautet:

# mit allow from all hat man die Möglichkeit
# sämtlichen IPs und Domains denn Zugriff zu gewähren
# mit deny from all hat man die Möglichkeit
# sämtlichen IPs und Domains denn Zugriff zu verweigern
order deny,allow
deny from all # alle werden verboten
allow from 127.0.0.1 # lediglich diese IP hat noch Zugfriff auf die Seiten

Unbedingt darauf achten, dass beim festlegen der Reihenfolge (allow,deny oder deny,allow) kein Leerzeichen hinter dem Komma steht!

Falsch: order deny, allow Richtig: order deny,allow

Außerdem sollte man die Angaben immer klein schreiben!

Eigene Fehlerseiten

Mit .htaccess hast du die Möglichkeit eigene Fehlerseiten festzulegen. Neben dem Festlegen von HTML-Dokumenten auf dem Server, gibt es auch noch die Möglichkeit von Extern HTML-Seiten einzubinden. Möchte man es ganz einfach, kann man auch einfach in die .htaccess-Datei HTML eintragen, welches ausgegeben wird. Eine weitere Möglichkeit ist einfach nur Text auszugeben.

ErrorDocument (HTTP-Statuscode) (Text/HTML/URL)

Mit ErrorDocument leitest du die Definition für die Fehlerbehandlung ein. Danach legst du fest für welchen HTTP-Statuscode diese Definition gilt.

Häufige HTTP-Statuscodes:
  • 403 - Forbidden(Zugriff verweigert)
  • 404 - Not Found(Nicht gefunden)
  • 500 - Internal Server Error(Fehler vom Server)

Beispiel mit Textausgabe:

Folgendes Beispiel wirft einen Text aus, wenn eine Seite nicht gefunden wurde:

#Normalerweise sollte man alles in eine Zeile schreiben, aber wer kann
#da noch im Code durchsehen? Deshalb kann der Backslash verwendet werden.
ErrorDocument 404 "Die Seite konnte leider nicht gefunden werden!\
Schauen sie doch unter www.beispiel.de vorbei\
vielleicht finden sie ja doch noch was."

Beispiel mit HTML-Ausgabe:

In folgendem Beispiel lassen wir die .htaccess-Datei einfach HTML ausgeben, wenn eine Seite nicht gefunden wurde.

ErrorDocument 404 "<html><head><title>Beispiel</title></head><body>\
<b>Die Seite konnte nicht gefunden werden!</b>\
</body></html>"

Eine eigene HTML-Seite einbinden:

Jetzt binden wir eine lokale HTML-Datei ein:

ErrorDocument 404 /404.html #404.html liegt im gleichen Verzeichnis wie die .htaccess

Externes HTML einbinden:

Wie schon erwähnt kann man auch externe HTML-Dokumente einbinden: #Achtung hiermit wird der User weitergeleitet!

ErrorDocument 404 http://www.beispiel.de/404.html #Die Datei liegt ganz woanders

Links zum Thema

Informationen: