.htaccess

Aus PytalWiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Was ist .htaccess?

Wenn ein Apache-Server eine Anfrage nach einer Datei oder nach einem Verzeichnis erhält, sucht er nach einer für diese Anfrage gültige .htaccess-Datei (siehe auch den Abschnitt Gültigkeitsbereich). Hat er eine solche Datei gefunden, führt er zuerst die darin enthaltenen Anweisungen aus. Diese Anweisungen können - soweit vom Server-Administrator erlaubt - den Zugriff auf Dateien und Verzeichnisse stark beinflussen. Der Punkt am Anfang des Dateinamens bedeutet, dass es sich um eine Systemdatei handelt. Diese sind häufig versteckt, unter Umständen muss erst eine Einstellung im FTP-Programm geändert werden, damit sie angezeigt werden.

Allgemeine Hinweise

Gültigkeitsbereich

Eine .htaccess-Datei gilt grundsätzlich für das Verzeichnis, in dem sie sich befindet und für alle Unterverzeichnisse. Falls für ein Unterverzeichnis andere Einstellungen gewünscht werden, muss eine weitere .htaccess-Datei erstellt werden.

Syntax

Grundsätzlich gilt: Eine Anweisung pro Zeile, wobei zuerst ein Schlüsselwort kommt und dann weitere Angaben dazu. Leerzeilen zur besseren Lesbarkeit sind erlaubt, werden aber ignoriert.

Kommentare

Kommentarzeilen beginnen mit einer Raute:

# Kommentar

Fehler / Nicht erlaubte Anweisungen

Fehler oder andere Stellen in der .htaccess-Datei, die der Server nicht interpretieren kann (z.B. weil man nicht erlaubte Anweisungen verwendet), führen immer zu einem "Internal Server Error" (HTTP-Status-Code 500).

Es ist bei Pytal nicht möglich, per .htaccess-Datei PHP-Einstellungen zu verändern. Solche Einstellungen sind nur noch über die PHP-Verwaltung im Webhostingmenü von Pytal möglich.

Bei Pytal nicht erlaubte Anweisungen (unvollständige Liste):

  • php_flag
  • php_value
  • FancyIndexing

Anwendungsbeispiele

Verzeichnisschutz/Dateienschutz

.htaccess stellt einen einfachen Weg bereit, um Verzeichnisse oder Dateien vor fremdem Zugriff zu schützen. Besucher, die geschützte Verzeichnisse oder Dateien ansehen möchten, müssen dann Benutzernamen und Passwort eingeben, um Zugriff darauf zu erhalten. Hierbei muss die .htaccess in das Verzeichnis abgelegt werden, das geschützt werden soll.

Verzeichnisschutz

Eine allgemeine .htaccess-Datei für Verzeichnisschutz könnte folgendermaßen aussehen:

# .htaccess-Datei für Verzeichnisschutz
 
AuthType Basic
AuthName "Adminstrator-Bereich"
AuthUserFile /verzeichnis/.htusers
AuthGroupFile /verzeichnis/.htgroups
Require valid-user
# oder: Require user Benutzer1 Benutzer2
# oder: Require group Administratoren
Erläuterung der verwendeten Anweisungen
Anweisung gültige Angaben Erläuterung
AuthType Basic meistens verwendet, Passwörter werden unverschlüsselt übertragen
  Digest Passwörter werden verschlüsselt übertragen, jedoch nicht alle Browser können damit umgehen
AuthName Beliebiger Text Dieser Name wird von Browsern angezeigt und für die Wiedererkennung genutzt (enthält der Text Leerzeichen, muss er in Anführungszeichen eingeschlossen werden)
AuthUserFile absoluter Pfad Pfad zu der Datei, in der die Benutzer und Kennwörter gespeichert werden (meistens .htusers oder .htpasswd)
AuthGroupFile absoluter Pfad Pfad zu der Datei, in der die Gruppenzugehörigkeit einzelner Benutzer gespeichert wird (meistens .htgroups), diese Anweisung ist nicht erforderlich
Require valid-user Jeder Benutzer, der in der AuthUserFile angegeben ist, wird akzeptiert
  user danach folgen beliebig viele Benutzer aus der AuthUserFile, andere Benutzer werden nicht akzeptiert
  group danach folgen beliebig viele Benutzergruppen aus der AuthGroupFile, andere Benutzer werden nicht akzeptiert

Beispiel für Pytal

Im Folgenden nun ein Beispiel wie die .htaccess-Datei auf Pytal aussehen könnte. In dem Beispiel heißt die Präsenz subdomain.pytalhost.de, wie du den Pfad auf deine Präsenz anpasst, steht im Artikel Absoluter Pfad.

AuthType Basic
AuthName "Administrator-Bereich"
AuthUserFile /srv/www/httpd/phost/s/de/pytalhost/subdomain/web/verzeichnis/.htusers
Require valid-user

Dateienschutz

Unter Umständen kann es vorkommen, dass nicht ein ganzes Verzeichnis, sondern nur bestimmte Dateien oder Dateien mit bestimmten Erweiterungen geschützt werden sollen. Grundsätzlich funktioniert das genauso wie der Verzeichnisschutz. Der einzige Unterschied besteht darin, dass die Require-Anweisungen mit folgender Syntax eingeschränkt werden:

<Files *.Dateierweiterung>
Require user Benutzer
Require group Benutzergruppe
</Files>

Beispiel

AuthType Basic
AuthName "Adminstrator-Bereich"
AuthUserFile /verzeichnis/.htusers
AuthGroupFile /verzeichnis/.htgroups
<Files *.htm>
Require group Administratoren
</Files>

In diesem Beispiel wird der Zugriff auf Dateien mit der Endung .htm nur Angehörigen der Benutzergruppe Administratoren gestattet.

.htusers-Datei

Die .htusers-Datei wird für den Verzeichnis- bzw. Dateienschutz benötigt. In ihr werden die akzeptierten Benutzer und die jeweiligen Passwörter gespeichert. Der Name .htusers ist nicht vorgeschrieben, du kannst der Datei einen selbstgewählten Namen geben. Ein anderer verbreiteter Name für diese Datei ist .htpasswd. Es muss lediglich darauf geachtet werden, dass der in der .htaccess angegebene Pfad zu der Datei korrekt ist.

Die allgemeine Syntax lautet:

# Kommentar
Benutzer1:Passwort
Benutzer2:Passwort

Da Pytal Linux-Server verwendet, müssen die Passwörter verschlüsselt gespeichert werden, dabei akzeptiert der Apache-Server die Verschlüsselung mit Hilfe der crypt-Methode von PHP oder mit Hilfe von MD5.

Beispiel für die crypt-Methode:

<?php
echo crypt( 'EinPasswort' );
?>

Um die Passwörter zu verschlüsseln, kannst du auch Tools verwenden, die man im Internet finden kann. Ein einfaches Online-Tool ist z.B. http://informationen.pytalhost.net/htcrypt.php.

.htgroups-Datei

In der .htgroups-Datei wird die Gruppenzugehörigkeit derjenigen Benutzer festgelegt, die in der .htusers-Datei aufgeführt werden.

Allgemeine Syntax:

# Kommentar
Gruppenname: Benutzer1 Benutzer2

IP-Adressen, IP-Bereiche, Adressenbereiche ausschließen/zulassen

Eine solche .htaccess-Datei könnte folgendermaßen aussehen:

# .htaccess-Datei zum Regeln von IP-Bereichen
Order deny,allow
Deny from 121.104.0.0/14
Deny from 121.112.0.0/13
Allow from 193.108.193.0/24

Die Zahl nach dem Schrägstrich stellt die Subnetzmaske dar. Eine Liste mit allen IP-Bereichen der Länder gibt es unter http://tools.sistrix.com/co/.

Erläuterung der verwendeten Anweisungen
Anweisung gültige Angaben Erläuterung
Order deny, allow oder allow, deny gibt die logische Reihenfolge der Interpretation an
Deny from IP(-Bereich), Adress(-Bereich) Anfragen mit passendem Absender werden abgelehnt
  all Jegliche Anfragen werden abgelehnt
Allow from IP(-Bereich), Adress(-Bereich) Anfragen mit passendem Absender werden akzeptiert
  all Jegliche Anfragen werden akzeptiert

Verzeichnis-Browsing/Directory-Listing

Ist das sogenannte Verzeichnis-Browsing oder Directory-Listing aktiviert und ruft man mit Hilfe des Browsers ein Verzeichnis ohne Index-Datei auf, so werden die enthaltenen Ordner und Dateien aufgelistet. Bei Pytal ist diese Funktion jedoch standardmäßig deaktiviert, deshalb erhält man stattdessen den Fehler "Forbidden" oder "Zugriff verweigert" (HTTP-Status-Code 403).

Allerdings kann man dies durch Hinzufügen der folgenden Zeile zur .htaccess-Datei manuell aktivieren:

Options +Indexes

Durch Hinzufügen der folgenden Zeile wird es explizit deaktiviert:

Options -Indexes

Eigene Index-Datei

Normalerweise gelten nur Dateien wie index.html oder index.php als Index-Datei. Das heißt, nur Dateien mit solchen Namen werden vom Server zurückgegeben, falls nur ein Verzeichnis, aber keine Datei angefordert wird. Man kann jedoch auch andere Dateien als Index-Datei definieren. Die Syntax dafür lautet:

DirectoryIndex Datei1.htm Datei2.htm Datei3.htm

Die hinter DirectoryIndex aufgezählten Dateien werden der Reihe nach auf deren Existenz geprüft. Die erste Datei, die der Server findet, wird zurückgegeben.

Eigene Fehlerseiten

Falls dir die Fehlerseiten von Pytal nicht gefallen, kannst du per .htaccess eigene definieren. In den folgenden Beispielen musst du HTTP-Status-Code durch die dreistellige Fehlernummer ersetzen, für die deine Fehlermeldung gelten soll (eine Übersicht über die wichtigsten Fehlernummern gibt es z.B. bei SELFHTML).

Hinweis: Mit den Standard-Einstellungen ignoriert der Internet Explorer zurückgegebene Fehlermeldungen, die kleiner als 512 Byte sind. Er zeigt dann seine Standard-Fehlermeldung an. Um dieses Problem zu umgehen, kann man in die Fehlerseite einfach einen sehr langen Kommentar einfügen.

Die allgemeine Syntax für eigene Fehlerseiten lautet:

ErrorDocument HTTP-Status-Code Fehlermeldung

Dabei kann der Text Fehlermeldung sein:

  • reiner Text oder HTML-Code in Anführungszeichen:
In diesen Fall wird der Text genauso ausgegeben, wie er in der .htaccess-Datei steht, HTML-Code wird von Browser dabei auch als solcher interpretiert. Für bessere Lesbarkeit kann der Backslash für den Zeilenumbruch verwendet werden (dieser wird jedoch vom Browser nicht beachtet).
Beispiel:
ErrorDocument 404 "Datei nicht gefunden!"
oder:
ErrorDocument 404 "<b style='color:red;'>Datei nicht gefunden!</b>"
  • URL:
Eine URL zu einem Dokument auf einem anderen Server. Die URL muss inklusive http:// angegeben werden.
Beispiel:
ErrorDocument 404 http://foo.bar/404err.html
  • Pfad zu einem Dokument:
Der Pfad zu dem Dokument muss relativ zum Wurzelverzeichnis deiner Webpräsenz angeben werden, wichtig ist dabei der Schrägstrich am Anfang der Pfadangabe.
Beispiel:
ErrorDocument 404 /error404.html

Redirect

Mit einem Redirect kann man z.B. durch Aufrufen der URL http://www.meineseite.de/admin direkt auf die URL http://www.meineseite.de/admin/bla/index.php?site=admin weitergeleitet werden.

Beispiel

Redirect /admin http://www.meineseite.de/admin/bla/index.php?site=admin

URL-Manipulation mit mod_rewrite

Mit mod_rewrite hat man ein mächtiges Werkzeug zur Verfügung, mit dem man URLs manipulieren kann. Es ist möglich, Anfragen umzuleiten und dies auch von diversen Bedingungen abhängig zu machen.

Erläuterung zu den mod_rewrite-Anweisungen
Anweisung gültige Angaben Erläuterung
RewriteEngine on Aktiviert mod_rewrite, ohne diese Anweisung funktioniert es nicht
  off Deaktiviert mod_rewrite, dies ist die Standardeinstellung
RewriteBase relativer Pfad Gibt die Basis für Umschreibung an. Gib hier den relativen Pfad zum Verzeichnis an, in dem die .htaccess-Datei liegt, für das Wurzelverzeichnis wäre dies beispielsweise / und für den Unterordner ordner wäre es /ordner/
RewriteCond Bedingung Gibt die Bedingung an, wann die Umschreibung angewendet werden soll
RewriteRule Umschreibungsregel Gibt die Regel an, wonach welche URL zu welcher URL umschrieben werden soll

URLs umschreiben

Die allgemeine Syntax für die Umschreibung von Anfangsurl nach Zielurl lautet:

RewriteEngine on
RewriteBase /
RewriteRule ^anfangsurl$ zielurl

Beispiel

Angenommen, du möchtest, dass eine eingegebene URL wie /artikel/6.html zu dem Aufruf der Datei index.php?artikel=6 führt. Die Anweisungen in der .htaccess-Datei sehen dann folgendermaßen aus:

RewriteEngine on
RewriteBase /
RewriteRule ^artikel/([0-9]+).html$ index.php?artikel=$1

Feste Subdomain einrichten

Mit Hilfe folgender .htaccess-Anweisungen kann man http://www.beispiel.de/forum/ auch unter http://forum.beispiel.de erreichbar machen:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} forum.beispiel.de$ [NC]
RewriteCond %{REQUEST_URI} !/forum/
RewriteRule ^(.*)$ forum/$1 [L]

Dynamische Subdomains einrichten

Wenn man möchte, dass jede Subdomain automatisch in ihren eigenen gleichnamigen Unterordner umgeleitet wird, wenn dieser existiert, kann man die folgenden .htaccess-Anweisungen benutzen:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.beispiel\.de [NC]
RewriteCond /srv/www/httpd/phost/b/de/beispiel/web/%2/ -d
RewriteRule (.*) /%2/$1 [L]

Weblinks

Meine Werkzeuge