.htaccess

Aus php bar
Wechseln zu: Navigation, Suche

.htaccess ist eine Konfigurationsdatei in der unabhängig zur allgemeinen Serverkonfiguration verschiedene Einstellungen und Veränderungen der Richtlinien im Dokumentenverzeichnis und den Unterverzeichnissen gemacht werden können. Sie ist nur auf dem Apache_(Webserver) verfügbar. Für den IIS existiert ein AddOn, dass einige Funktionen einer .htaccess Datei bereitstellt.

siehe auch: php.ini, ini_set()

Konfiguration Webserver

Über diese Konfigurationsdatei lassen sich viele Webserver-Konfigurationen einstellen.

Index

Mit dem Schlüsselwort DirectoryIndex wird die Datei festgelegt, die beim Aufruf eines Verzeichnisses ohne Dateiangabe aufgerufen wird:

DirectoryIndex index.php

Nützlich da meistens nur index.html als Standard eingestellt ist, und man in seinem Projekt nur eine index.php hat. Es ist außerdem auch möglich, mehrere Dateien anzugeben, die je nach Vorhandensein in dieser Reihenfolge aufgerufen werden:

DirectoryIndex index.php start.php error.php

Will man hingegen eine offene Auflistung eines Verzeichnisinhaltes, so setzt man keine index.html etc. ein, sondern stattdessen nur eine .htaccess mit folgenden Einstellungen bei Options:

Options +Indexes

Fehler

Wenn ein Fehler auftritt, sendet der Server eine automatisch generierte Seite mit einer Fehlermeldung an den Client. Allerdings kann man auch eine eigene Fehlerseite anhand des Fehlercodes mit Hilfe von ErrorDocument schreiben:

ErrorDocument 404 /errors/404.php

Anstelle des Fehlercodes 404 kann man auch jeden anderen HTTP-Fehler (zum Beispiel 403 oder 500) einsetzen und verwenden.

Adresswandlung

Die Adresswandlung (mod_rewrite) ist für viele dynamische Anwendungen ein wichtiges Hilfsmittel. Dabei werden Anfragen an den Web-Server aufgrund regulärer Ausdrücke in eine reale URI gewandelt.

Voraussetzungen

Das physikalische Verzeichnis muss in der Konfigurationsdatei für die Anwendung des Apache-Moduls mod_rewrite vorbereitet werden. Beispiel für die Konfigurationsdatei des Web-Servers:

<VirtualServer *:80>
  ServerName www.example.com
  ServerAlias example.com
  DocumentRoot /usr/local/httpd/example.com/htdocs
  <Directory /usr/local/httpd/example.com/htdocs>
    AllowOverride All
    Options +FollwoSymlinks
  </Directory>
</VirtualServer>

Die nachfolgenden Einstellungen können wahlweise in der .htaccess oder der Sektion für den virtuellen Server in der Server-Konfiguration erfolgen. Wenn man Zugriff auf die Server-Konfiguration hat, ist es aus Gründen der Performance zu empfehlen, dort die Einstellungen vorzunehmen.

Konfiguration

Die Konfiguration erfolgt in der .htaccess selbst:

RewriteEngine On

schaltet die Adresswandlung prinzipiell ein.

RewriteBase /subdir

legt fest, dass sich alle weiteren Adressen auf das Unterverzeichnis subdir beziehen, es sei denn, ein absoluter URI wird angegeben.

Beispiel

Angenommen, ein kleiner Einzelhändler möchte für eine Weihnachtsaktion ein bestimmtes Produkt aus seinem Web-Shop bewerben, so ist in der Print-Werbung eine sprechende URI sinnvoller, als die vielen Parameter, die ein Skript zur Darstellung der Daten benötigt. Unser Einzelhändler bewirbt zwei Produkte mit folgenden URI:

http://www.example.com/kerzen
http://www.example.com/kugeln

Sein Web-Shop befindet sich dabei in einem Unterverzeichnis. Die echten URI wären

http://www.example.com/shop/index.php?article=1&display=details
http://www.example.com/shop/index.php?article=2&display=details

Die notwendigen Einstellungen in der .htaccess wären dann:

RewriteRule ^kerzen[\/]$ index.php?article=1&display=details [QSA]
RewriteRule ^kugeln[\/]$ index.php?article=2&display=details [QSA]

Erkennbar besteht eine Anweisung aus 4 Einzelteilen. RewriteRule stellt das Schlüsselwort dar, mit dem der Web-Server angewiesen wird, die nachfolgenden Argumente zur Umschreibung der Adressen zu benutzen. Der zweite Parameter ist der reguläre Ausdruck, auf den der angefragte URI passen muss. Der dritte Parameter stellt die tatsächliche Zieladresse dar; diese muss sich nicht auf dem Server befinden, sondern kann jede gültige URI sein. Der vierte Parameter enthält Optionen, die zusätzlich berücksichtigt werden sollen; im Beispiel sorgt QSA dafür, dass übergeben Argumente wieder an die gewandelte Adresse angehängt werden.

Es können auch Parameter dynamisch übergeben werden. So wird durch die Regel

RewriteRule ^article([0-9]+)\.html$ index.php?articleid=$1 [QSA]

dem Besucher eine statische HTML-Adresse vorgetäuscht.

Passwortschutz

Um ein Verzeichnis mit einem Passwort zu schützen, muss eine .htaccess und eine .hpasswd Datei in dem zu schützenden Verzeichnis angelegt werden. Die Reihenfolge der einzelnen Anweisungen in der Datei ist egal. Benötigt wird das standardmäßig aktivierte Apache Modul mod_auth_basic. Der Server sendet einen HTTP 401 "Athorization Required" Header.

Beispiel

.htaccess:

 AuthUserFile /verzeichnis/.htpasswd
 AuthName "Geschützter Bereich"
 AuthType Basic

.htpasswd:

 user1:password1
 user2:password2

Erklärung

Als erstes wird mit "AuthUserFile" eine Datei angegeben, in der die Benutzernamen und die dazugehörigen Passwörter stehen. Dann wird mit "AuthName" der Name des geschützten Bereichs definiert. Dieser ist ohne Belang. Als nächstes folgt mit "AuthType" die Authentifikationsmethode. Die einzige derzeit unterstütze Methode ist "Basic", bei der die Übertragung der Passwörter unverschlüsselt geschieht.

Weitere Möglichkeiten

Weiterhin können die Benutzernamen und die Passwörter aus einer MySQL Datenbank geholt werden mit dem "authn_dbm_module".

Konfiguration PHP

Ebenso kann man auch PHP-Einstellungen in dieser Datei ändern. Diese Anweisungen sind nur verfügbar, wenn PHP als Apache Modul läuft. Werte, die einen bool'schen Wert, also On, Off, 0, 1 erfordern, können mit der Direktive "php_flag" angesprochen werden. Alle anderen Werte mit "php_value". Zusätzlich gibt es noch "php_admin_value" und "php_admin_flag". Diese beidern Direktiven können nur in der http.conf Datei verwendet werden. Alle Werte, die mit ihnen gesetzt werden, können nicht in .htaccess Dateien durch "php_flag" und "php_value" verändert werden.

Syntax

Die Syntax ist für alle php_* Anweisungen gleich.

 php_flag Konfigurationsname Wert

Beispiel

register_globals und include_path:

php_flag register_globals off
php_value include_path ".:/usr/local/lib/php"

Die Namen der einzelnen Optionen können im PHP-Handbuch nachgelesen werden.

ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden:Weitere Beispiele in .htaccess

Weblinks