The webserver's behaviour can be influenced with .htaccess files. Despite the name, .htaccess files can be used for much more than access control.

The rules in an .htacess file apply to the directory that contains the file, as well as all sub-directories, as long as they are not overwritten by another .htaccess file.

Which directives can be used in .htaccess files, depends on wether the directory belongs to a site in the standard hosting or a personal homepage. For the standard hosting, generally all directives that valid in a .htacess are allowed. For personal homepages, directives of type Options are excluded.

Below are some usage examples for .htaccess files. Please look at the official Apache webserver documentation for further information.

Anwendungsbeispiel 1: Verzeichnisse sperren

Manchmal ist es nötig, alle Zugriffe auf ein Verzeichnis zu blockieren. Meist sind Konfigurations- oder Passwort-Dateien zu schützen, die vom Server nicht ausgeliefert werden sollen. Eine andere Option ist, die entsprechenden Dateien nicht im DocumentRoot, sondern in einem anderen Verzeichnis abzulegen. Die folgende Direktive sperrt den Zugriff auf ein Verzeichnis für alle Anfragen aus dem Web.

require all denied

Anstatt all kann auch eine Liste von Domains oder IP-Adressen angegeben werden, für die der Zugriff gesperrt werden soll. Diese Art der Zugriffskontrolle ist aber durch die Heterogenität von IPv4- und IPv6-Adressen nicht zu empfehlen. Nutzen Sie für die Zugriffskontrolle wie unten beschrieben eine einfache Passwort-Authentifizierung oder die Nutzerverwaltung Ihrer Anwendung.

Weitere Informationen zum Blockieren und Freigeben von Verzeichnissen finden Sie in der Apache-Dokumentation im Artikel Access Control.

Anwendungsbeispiel 2: Passwort-Authentifizierung

Einen einfachen Passwort-Schutz für ein Verzeichnis kann man mit einer .htaccess-Datei sowie einer separaten Passwort-Datei erreichen.

Passwort-Datei anlegen

Die Passwort-Datei ist eine Textdatei, die für jeden Nutzer:innen-Namen eine Zeile nach dem folgenden Muster enthält.

Name:verschlüsseltes Passwort

Die Datei kann mit dem Kommando htpasswd erstellt werden, das Ihnen auf unserer Zugangsmaschine zur Verfügung steht. Die erstellte Passwort-Datei darf nicht in einem Verzeichnis liegen, das öffentlich zugänglich ist (siehe Beispiel).

.htaccess-Datei anlegen

Die Datei muss in dem Verzeichnis liegen, für das die Authentifizierung eingerichtet werden soll. Der folgende Block bewirkt die Authentifizierung und stellt sicher, dass die Kommunikation verschlüsselt wird.

.htaccess (Auszug)
<If "%{ENV:HTTPS} !~ /on/i">
   RewriteEngine On
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [redirect=permanent,last]
</If>
<Else>
   AuthType Basic
   AuthName "Mein interner Bereich"
   AuthUserFile /nfs/web_mwn/www/x/kennung/webserver/config/pwd_datei
   Require valid-user
</Else>
  • AuthName ist ein frei wählbarer Text, der den Bereich bezeichnet, für den eine Authentifizierung notwendig ist. Der Text wird normalerweise vom Browser im Anmeldedialog angezeigt.
  • AuthUserFile gibt den Pfad an, wo die oben erstellte Passwort-Datei zu finden ist.
  • Require valid-user erlaubt es allen Nutzer:innen, die einen Eintrag in der Passwort-Datei haben, sich zu authentifizieren. Anstatt valid-user können auch einzelne Namen (mit Leerzeichen getrennt) aufgelistet werden.

Anwendungsbeispiel 3: Umschreiben von URLs

Zum Umschreiben von URLs kann man zwischen zwei Direktiven (bzw. Direktiv-Familien) wählen: Redirect(Match) und RewriteRule.

Einfache Redirects, wie die komplette Umleitung einer Site auf eine andere, lassen sich mit RedirectMatch einfach realisieren:

RedirectMatch ^ https://www.lrz.de?

Will man alle Aufrufe, die mit einer URL nach dem Muster http://www.example.com/unterverzeichnis/* aufgerufen werden, und den (beliebigen) URL-Teil, der dem Stern * entspricht, beibehalten, kann dies mit dieser .htaccess -Datei erreicht werden:

  RewriteEngine  On
  RewriteRule  ^unterverzeichnis(.*)  https://www.lrz.de$1 [nocase,redirect]

Diese Konfiguration bewirkt, dass beispielsweise ein Aufruf von http://www.example.com/unterverzeichnis/index.html auf https://www.lrz.de/index.html umgeleitet wird. Die erste Direktive ist notwendig, um das Umschreiben von URLs zu aktivieren. Die RewriteRule-Direktive wird nach folgendem Muster aufgerufen:

RewriteRule Muster Substitution [Optionen]

Die Regel wird dann folgendermaßen umgesetzt: Jede URL, die von dem regulären Ausdruck Muster erfasst wird, wird entsprechend der Substitution modifiziert. Die Ausdrucksmöglichkeiten der regulären Ausdrücke orientieren sich dabei an der Perl-Syntax: beispielsweise markiert das Zeichen "^" den Anfang des Strings. Ausdrücke, die im Muster geklammert sind, lassen sich in der Substitution wieder aufrufen (nach Reihenfolge im regulären Ausdruck, im Beispiel entspricht also $1 dem Inhalt von (.*)). Das Flag [nocase] gibt an, dass Groß/Kleinschreibung ignoriert werden soll, [redirect] erzwingt die Weiterleitung zur externen Ressource.

Weitere Informationen finden Sie hier:

Tipp

Um beim Einrichten von Weiterleitungen das Testen zu erleichtern, kann man mit dem Flag redirect=temp das Cachen der Weiterleitungen im Browser verhindern. Sobald alles funktioniert, kann man dauerhafte Weiterleitungen mit redirect=permanent bestimmen. 

Example 4: Force secure connection

To make the site accessible exclusively via HTTPS – i. e. encrypted – you can use this .htaccess snippet:

  RewriteEngine On
  RewriteCond %{ENV:HTTPS} !On
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [redirect=permanent,last]

Example 5: Redirect aliases to main name

If your server – for whatever reason – can be contacted under several names, but always shows the same content, it is called Duplicate Content. The following lines will redirect all request to one main name (www.example.com in the example) and at the same time enforce a secure connection method (HTTPS) similar in example 4.


RewriteCond %{ENV:HTTPS} !On [nocase,or]
RewriteCond "%{HTTP_HOST}" !=www.example.com [nocase]   
RewriteRule ^(.*)$ https://www.example.com/$1 [redirect=permanent,last]
  • No labels