Die .htaccess Datei erstellen – Mit Beispielen

Mit der .htaccess Datei hast du zahlreiche Möglichkeiten, mit der du deine Seiten aufwerten und schützen kannst. Diese möchte ich Dir im folgenden näher bringen.

Ein kleiner Hinweis am Rande: Den Zugriff über den Browser auf Dateien die mit .ht beginnen blockiert der Apache-Server in der Regel automatisch, sodass niemand deine .htaccess Datei ansehen kann. Sie funktioniert zudem serverintern, sodass der Benutzer sie nicht manipulieren kann.

Wichtig zu wissen ist außerdem noch, dass du für jeden Befehl eine neue Zeile verwenden musst und, dass mod_rewrite für manche Methoden aktiviert sein muss.

.htaccess Methoden

Mit Hilfe der .htaccess können verschiedene Methoden/Funktionen angewandt werden. Dies sind die wichtigsten:

  • RewriteEngine
    Um Weiterleitungen/URL-bezogene Regeln zu ermöglichen, musst Du zunächst die RewriteEngine aktivieren. Dafür kannst du einfach den folgenden Codeschnipsel an den Anfang der .htaccess platzieren:RewriteEngine on
  • RewriteBase
    RewriteBase wird bei Umleitungen benötigt, wenn man den Basispfad für Umleitungen festlegen will und das Verzeichnis nicht über den eigentlichen Namen erreichbar ist (SELFHTML). Einfach gesagt: Probier’s einfach mal aus, hier ein Beispiel:RewriteBase /verzeichnis
  • RewriteCond
    Mit RewriteCond kannst du Ausnahmen zu der darauf folgenden Regel definieren. Also nach dem Motto, wenn das nicht so ist, dann befolge die Regel. Das sieht zum Beispiel so aus:RewriteCond %{REQUEST_URI} !^(.*)/img/(.*)$ [NC]Dieser Code bewirkt, dass die nachfolgende Regel nur ausgeführt wird, wenn die vollständige URL (REQUEST_URI) nicht (!) nach folgendem Schema aufgebaut ist: [Zeilenanfang]irgendwas/img/irgendwas[Zeilenende]Zu den weiteren Möglichkeiten neben REQUEST_URI findet ihr mehr im nächsten Punkt. Das [NC] steht übrigens für no case (sensitive) und besagt, dass nicht unter Klein- und Großschreibung unterschieden werden soll.
  • Die .htaccess Variablen
    Ich nenne die Codeschnipsel wie REQUEST_URI jetzt einfach mal .htaccess-Variablen, was sie ja im Prinzip auch sind. Da ich auf eine Website gestoßen bin, die diese Möglichkeiten alle auflistet, verlinke ich diese einfach mal.
  • Zusätzliche .htaccess Parameter
    Ich hatte zu Beginn schon einmal auf das [NC] und dessen Bedeutung hingewiesen. Hier mal eine kleine Auflistung der möglichen Paramter. Parameter können per Komma übrigens kombiniert werden und müssen dann mit einem Paar eckigen Klammern umschlossen werden.NC = Unabhängig ob Groß- oder Kleinschreibung (no case (sensitive))
    R=301 = Weiterleitung mit dem 301-er Header
    L = Zeigt auf, dass die aktuelle Regel beendet istEs gibt noch weitere Möglichkeiten, wenn ihr so etwas braucht, solltet ihr dann einfach mal googeln.
  • RewriteRule
    Kommen wir jetzt zu der, wie ich finde, wichtigsten Methode: RewriteRule. Hiermit definiert man eine Regel, was zum Beispiel so aussehen kann:RewriteRule ^(.*)$ /index.php?e=$1Damit geben wir http://www-coding.de/[$1] weiter und übergeben dann alles, was hinter der Domain (in diesem Fall www-coding.de) steht, als Parameter e an die index.php im Hauptverzeichnis.
  • Kommentare in der .htaccess
    Wo man in anderen „Sprachen“ /* Kommentar */ oder // Kommentar nutzt, reicht bei .htaccess ein einfaches # Kommentar.

Im Folgenden möchte ich euch nun noch einige Beispiele zur Verwendung der .htaccess nennen.

1. Beispiel: Virtuelle Ordner / Ordner simulieren

Es wird dir vielleicht aufgefallen sein, dass der Pfad zu dieser Seite http://www-coding.de/die-htaccess-datei-erstellen/ lautet. Also müssten wir theoretisch für jeden neuen Artikel einen neuen Ordner erstellen, das tun wir aber nicht:

RewriteCond %{REQUEST_URI} !^(.*)/img/(.*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !^(.*).(gif|png|jpe?g|bmp|php|htm|html|js|css|txt|csv|pdf|xml)$ [NC]
RewriteRule ^(.*)$ /index.php?e=$1

Wir sagen zunächst, dass Dateien aus dem Bilder-Ordner (img) und Dateien allgemein wie 123.html von der Regel ausgeschlossen werden und leiten dann alle Zugriffe von http://www-coding.de/[xy] auf index.php?parameter=[xy] weiter.

Die RewriteEngine muss zuvor aktiviert worden sein, dies gilt auch für alle anderen Beispiele! Ein ausführliches Tutorial zu dem interessanten Thema findest du in hier.

2. Beispiel: „/“ erzwingen

Wer kennt es nicht? Mal werden (virtuelle) Ordner per ordner und mal per ordner/ aufgerufen.

Um für ein einheitliches Schema zu sorgen und doppelten Content zu vermeiden, erzwingen wir per .htaccess ein „/“ nach einem Ordnernamen:

RewriteCond %{REQUEST_URI} ^/[^.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

3. Beispiel: www erzwingen oder unterbinden

Wenn die Webseite mit und ohne www erreichbar ist, sorgt das für doppelten Content, was den Suchmaschinenrankings schaden kann. Deshalb kann man das www unterbinden:

RewriteCond %{HTTP_HOST} ^www.www-coding.de [NC]
RewriteRule (.*) http://www-coding.de/$1 [R=301,L]

Die URL solltest du für deine Zwecke anpassen.

Oder man kann es erzwingen:

RewriteCond %{HTTP_HOST} ^www-coding.de [NC]
RewriteRule (.*) http://www.www-coding.de/$1 [R=301,L]

4. Beispiel: Passwortschutz

Da dieses Beispiel relativ komplex zu behandeln ist, verweise ich hier ruhigen Gewissens auf SELFHTML, wo man eine ausführliche Anleitung zu diesem Thema findet.

5. Beispiel: Computer ausschließen

Es gibt immer Mal Besucher oder Bots, die man nicht so gerne auf den eigenen Seiten haben möchte, dafür gibt es die Möglichkeit gezielt IP-Adressen auszuschließen:

deny from IP.Adresse

Gibt es nicht dynamische IP-Adressen?, fragt ihr euch jetzt vielleicht. Ja, die gibt es, deswegen macht so etwas auch nur bedingt Sinn.

Es gibt allerdings auch die Möglichkeit nur manchen IP-Adressen Zugriff zu gewähren:

order deny,allow
allow from IP.Adresse1
allow from IP.Adresse2
deny from all

Hier können beliebig viele IP-Adressen angegeben werden. Das order deny,allow legt wie das order schon andeutet die Rangfolge fest. In diesem Fall heißt das: Grundsätzlich verbieten (deny from all), aber es gibt Ausnahmen.

6. Beispiel: Bilder schützen

Wenn andere deine Bilder direkt von deiner Webseite einbinden, zieht das Traffic, (meistens) ohne dass du davon profitierst. Mit der .htaccess kannst du dies verhindern:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www-coding.de/.*$ [NC]
RewriteRule .(png|jpe?g|gif)$ - [F]

Diese Regel sorgt dafür, sofern die RewriteEngine aktiviert ist, dass wenn der Referer (Seite, von der der Besucher bei dieser Anfrage kommt) weder leer (1. RewriteCond) noch unsere eigene Website ist, die Dateitypen PNG, JPG/JPEG und GIF für den Aufruf verboten ([F] = forbidden) werden.

Schön ist es dann auch noch dem Besucher ein anderes Bild unterzuschieben. Denke auch hier daran, die URL durch deine eigene zu ersetzen.

7. Beispiel: Eigene Fehlerseiten

Sehr populär ist die folgende Methode: Mit der .htaccess Datei eigene Fehlerseiten definieren. Die Standard-Fehlerseiten sehen nicht gerade schön aus und geben eventuell wertvolle Informationen über die Apache-Version preis. Durch Suchfunktionen kann man dem Besucher mit einer eigenen Fehlerseite einen Mehrwert bieten:

ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

Anschließend müssen nur noch die entsprechenden HTML-Dateien (es kann natürlich auch auf virtuelle Ordner (siehe 1. Beispiel) verlinkt werden) erstellt und mit Inhalt gefüllt werden.

8. Beispiel: Dauerhafte Weiterleitung einer Webseite

Wer mit einer Webseite dauerhaft umgezogen ist, sollte den 301er Header verwenden um dies mitzuteilen:

Redirect 301 / http://dieneuedomain.de

Und wenn du Lust hast, kannst du dir selber ein weiteres Beispiel basteln, das du benötigst, wenn die Pfade an sich gleich bleiben und sich nur die Domain ändert.

Tipp: Verwende dahinter den Paramter [R=301] um mitzuteilen, dass diese Änderung dauerhaft besteht.

9. Beispiel: Browser Caching

In der .htaccess kannst du Vorgaben für das sogenannte Browser Caching festlegen.

So kannst du dem Browser beispielsweise empfehlen CSS-Dateien für zwei Wochen auf dem Gerät zu speichern und erst nach Ablauf der Zeit die Datei wieder neu abzufragen.

 

ExpiresActive On
ExpiresByType text/css "access plus 2 weeks"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/x-icon "access plus 3 months"

Dieses Beispiel sollte selbsterklärend sein. Für jede Dateiart, braucht es einen ExpiresbyType Befehl. Nach der Angabe der Dateiart folgt in Klammern die Angabe, wie lange gecacht werden soll.

 

10. Beispiel: Directory Listing

Directory Listing verhindert oder erlaubt je nach Einstellung das Anschauen der Verzeichnisinhalte.

Wenn Directory Listing beispielsweise aktiviert ist und ein Besucher http://eineseitevondir.de/einordnervondir/ aufruft, werden ihm alle Inhalte des Ordners angezeigt, um das Directory Listing zu verhindern und stattdessen eine 403-Fehlermeldung anzuzeigen kannst du folgenden Befehl nutzen:

Options -Indexes

um es hingegen zu erlauben, muss der Code nur leicht abgeändert werden:

Options +Indexes
Zudem gibt es noch weitere Einstellungsmöglichkeiten z.B. für eine klassiche Liste (IndexOptions -FancyIndexing) oder eine etwas verbesserte Liste mit Symbolen (IndexOptions +FancyIndexing). Evtl. möchtest du auch spezielle Dateien verstecken, auch dafür gibt es ein Code Snippet:
IndexIgnore *.gif *.png (schließt alle GIF- und PNG-Dateien aus) oder spezieller IndexIgnore bild.gif bild.png (schließt die Dateien bild.gif und bild.png aus).

Eine weitere Möglichkeit ist es statt dem Directory Listing und der Index Datei eine andere Datei festzulegen die standardmässig bei dem Ordneraufruf angezeigt wird:

DirectoryIndex newindex.php