.htaccess (engl. hypertext access „Hypertext-Zugriff“) ist eine Konfigurationsdatei auf NCSA-kompatiblen Webservern wie Apache, in der verzeichnisbezogene Regeln aufgestellt werden können. Beispielsweise kann man darüber ein Verzeichnis oder einzelne Dateien durch HTTP-Authentifizierung vor unberechtigten Zugriffen schützen. Auch Fehlerseiten oder Weiterleitungen innerhalb des Servers (siehe Rewrite-Engine) lassen sich darin festlegen, ohne dass der Server neu gestartet werden muss: Änderungen in der .htaccess-Datei treten ohne Weiteres sofort in Kraft, weil die Datei bei jeder Anfrage an den Webserver ausgewertet wird.
Bestimmungen in einer .htaccess wirken wie Directory-Abschnitte in zentralen Konfigurationsdateien wie einer httpd.conf. Sie gelten nur für das Verzeichnis, in dem die .htaccess gespeichert ist, und in allen seinen Unterverzeichnissen; können aber in den Unterverzeichnissen überschrieben werden.
Einsatzmöglichkeiten
Zugriffsschutz
Soll der Zugriff auf ein Verzeichnis durch die Abfrage von Login-Daten geschützt werden (hier /var/www/html), wird in diesem Verzeichnis eine .htaccess-Datei mit folgendem Inhalt angelegt.
AuthType Basic AuthName "Titel des Passwortschutz" AuthUserFile /var/www/html/.htpasswd Require valid-user
Dabei verweist AuthUserFile auf eine Datei, die Benutzernamen und Passwort in der Form Benutzername:Hash enthält. Dieser Inhalt kann beispielsweise mit dem Tool htpasswd oder mit einem Online-Generator erzeugt werden.
$ htpasswd -nb derName dasPasswort derName:$apr1$m0OaZVp0$9OHApAf65z24vNUZts8Zz1
Dabei stehen die Hashfunktionen MD5, bcrypt, crypt und SHA zur Auswahl und manchmal werden an das Passwort zufällige Zeichen angehängt – Salt genannt (engl. für Salz) – bevor der Hashwert berechnet wird, wodurch auch identischen Passwörtern unterschiedliche Passwort-Hashwerte zugeordnet werden.
Request-Umleitung
Wenn auf dem Webserver ein Modul installiert ist, das eine URL abändern kann, dann können in der .htaccess-Datei Umleitungen definiert werden.
Das folgende Beispiel besagt in Zeile 1: „Wenn www.example.com nicht in der Anfrage vorkommt, …“ und in Zeile 2: „… dann leite weiter nach http://www.example.com.“
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Rewrite-Engine
Eine Rewrite-Engine (von englisch rewrite, „umschreiben“ und engine, „Maschine“) ermöglicht es, an einen Webserver gerichtete Anfragen intern umzuschreiben oder extern weiterzuleiten. Für den Apache-Webserver erledigt das Softwaremodul mod_rewrite diese Aufgabe. Andere Webserver wie etwa Microsoft IIS, Nginx, Lighttpd oder Hiawatha Webserver bieten ähnliche Funktionen.
Geschaffen wurde diese Funktionalität, um nach außen ein von internen Faktoren unabhängiges Adressierungsschema zur Verfügung stellen zu können, sodass beispielsweise selbst bei einer Änderung der Dateihierarchie die URLs weiterhin gültig bleiben. Man spricht in diesem Fall auch von Permanentlinks.
Die Rewrite-Engines erlauben, die Adressumleitung von zusätzlichen Bedingungen neben der angefragten URL abhängig zu machen, zum Beispiel von der referenzierenden URL, der User-Agent-Kennung oder der IP-Adresse des anfragenden Clients. Auf diese Weise können beispielsweise Domainweiterleitungen oder auch Cloaking realisiert werden.
Beispielanwendung
Rewrite-Engines werden häufig genutzt, um Ressourcen mit dynamischen URLs unter Alternativadressen erreichbar zu machen.
Die Ressource mit der internen, technisch bedingten Adresse
/w/index.php?title=Beispiel
ist so beispielsweise auch unter folgender Adresse erreichbar
/wiki/Beispiel
Nach außen werden dann statt der dynamischen, parametrisierten Adressen scheinbar statische Adressen verwendet. Dies ist nützlich, da kurze, selbsterklärende Adressen meist als lesbarer, einfacher zu merken und ganz allgemein als vertrauenswürdiger eingestuft werden. Man spricht in diesem Fall auch von Clean URLs.
Eine mögliche Umsetzung des gezeigten Anwendungsfalls für das Apache-Modul mod_rewrite lautet im Serverkontext beispielsweise unter Nutzung eines regulären Ausdrucks:
RewriteEngine on RewriteRule ^/wiki/(.*)$ /w/index.php?title=$1
Im Verzeichniskontext (per .htaccess-Datei) oder beim Einsatz der RewriteBase-Direktive kann die Syntax davon abweichen.
Quelle: Wikipedie (http://de.wikipedia.org/wiki/.htaccess)
Quelle: Wikipedie (http://de.wikipedia.org/wiki/Rewrite-Engine)