.htaccess & Mod-Rewrite

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

“Eine Rewrite-Engine ermöglicht es, an den Webserver gerichtete Anfragen intern umzuschreiben oder extern weiterzuleiten.” – Wiki

 

1.) Seiten ohne subdomain (http://domain.de)
2.) Seiten mit www (http://www.domain.de)
3.) Schrägstrich hinzufügen
4.) Eine einfache Weiterleitungen
5.) alle Anfragen auf ein Unterverzeichnis auf die Hauptseite weiterleiten
6.) Bilder von Ihrer domain schützen
7.) SSL-Verbindung an einen SSL-Proxy weiterleiten
8.) Verbindungen auf Port umbiegen
9.) Sub-Domain umleiten
10.) Client aussperren
11.) Umleiten der Anfrage
12.) Neue Index-Datei
13.) Webseiten Zugriff schützen
14.) ErrorSeite umleiten
15.) Slash am Ende einer Datei entfernen
16.) doppelten Slash in der URL entfernen
17.) Dateien sperren
18.) .htaccess umbenennen
19.) Verzeichnisauflistung an/aus
20.) Fehlermeldungen (parse-errors) ausgeben
21.) SubDomain in einen Unterverzeichnis umleiten (ohne die URL (Path) zu ändern)

 

Vorbereitung:
Unsern Apache2 Webserver müssen wir beibringen, dass er eine URL neu-schreiben kann.

a2enmod rewrite

Und in der ersten Zeile unserer “.htaccess”-Datei muss folgendes stehen, wenn wir die “rewrite”-Funktion nutzen wollen.

RewriteEngine On

 

1.) Seiten ohne subdomian (http://domain.de)

wenn irgendeine Subdomain in der url mit angegeben wird, wird trotzdem die domain ohne subdomain angezeigt

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

 

1.2) mann kann auch bestimmte subdomains von dieser Regel ausschließen

RewriteCond %{HTTP_HOST} ^([^.]+).domain.de$ [NC] [OR]
RewriteCond %{HTTP_HOST} !^subdomain.domain.de$ [NC]
RewriteRule ^(.*)$ http://domain.de/$1 [R=301,L]

 

1.3) Seiten ohne www (http://domain.de)

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

 

2.) Seiten mit www (http://www.domain.de)

wenn irgendwas außer www vor der Domain angegeben ist, wird www eingefügt

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

 

2.1) mann kann auch bestimmte subdomains von dieser Regel ausschließen

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

 

3.) Schrägstrich hinzufügen

um z.B. einen Schrägstrich hinter die angegebene URL setzen möchte, kann man dies wie folgt machen

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

 

4.) Eine einfache Weiterleitungen

alle Anfragen auf forum.html werden auf
forum/forum.php weitergeleitet, in der URL steht nun noch immer forum.html

RewriteRule forum.html forum/forum.php

 

4.1) alle Unterverzeichnisse auch umleiten, in der URL steht nun der neue Pfad

RewriteRule forum/(.*)$ forum_neu/forum.php [R=301,L]

 

4.2) die Unterverzeichnisse mit übertragen, somit kommen wir z.B. von forum/Unterverzeichnis nach forum_neu/Unterverzeichnis

RewriteRule forum/(.*)$ forum_neu/$1 [R=301,L]

 

4.3) URL neu-schreiben (rewriting)

Der nachfolgende Code bewirkt, dass

“http://www.domain.de/index.php?go=home”

wie folgt umbenannt wird

“http://www.domain.de/home.html”

RewriteRule ^(.*).html$ index.php?go=$1 [L]

 

5.) alle Anfragen auf ein Unterverzeichnis auf die Hauptseite weiterleiten

RewriteRule forum/?$ / [R=301,L]

 

6.) Bilder von Ihrer domain schützen

Bilder von Ihrer domain schützen, indem diese nicht von anderen domians (Referer) geladen werden dürfen, sobald dies geschieht, wird im folgendem Beispiel, anstatt des Bildes ein RSS-Feed Bild angezeigt, wobei google von dieser Regel ausgenommen ist…

RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.de(/.*)?$ [NC] [OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.(de|com)(/.*)?$ [NC]
RewriteRule .(BMP|JPG|JPEG|GIF|PNG)$ http://feeds2.feedburner.com/voku-online.4.gif [L]

domain.de muss du noch durch deine eigene Domain ersetzen und “RewriteEngine On” am Anfang deiner .htaccess-Datei einfügen

weitere Dateiendungen welche Sie blocken könnten

BMP|JPG|JPEG|GIF|PNG|SWF|WMV|MPG|MPEG|AVI|DIVX|MP3|WMA|MOV|RM
|FLV|bmp|jpg|jpeg|gif|png|swf|wmv|mpg|mpeg|avi|divx|mp3|wma|mov|rm|flv

auf folgender Webseite, kannst du testen, ob deine Bilder nun geschützt sind…
coldlink.com

 

7.) SSL-Verbindung an einen SSL-Proxy weiterleiten

RewriteCond %{SERVER_PORT} ^443$
RewriteRule (.*) https://ssl-id1.de/%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

 

8.) Verbindungen auf Port umbiegen


8.1) Verbindungen auf Port 80 umbiegen

Verbindungen welche nicht auf Port 80 eintreffen (solange im Webserver mehrere offene Port konfiguriert sind – meistens Port 80 [http] 443 [https]) auf Port 80 weiterleiten

RewriteCond %{SERVER_PORT} !^80
RewriteRule ^(.*)$ http://www.domainname.de/$1 [R=301,L]

 

8.2) Verbindungen auf Port 443 umbiegen

RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.domainname.de/$1 [R=301,L]

 

9.) Sub-Domain umleiten

um z.B. eine subdomains “linux.voku-online.de” einfach nur umzuleiten, kann man folgendes eintragen, somit bleibt die Sub-Domain in der URL erhalten

RewriteCond %{HTTP_HOST} ^linux.voku-online.de [NC]
RewriteRule ^$ /news-c5.html [R=301,L]

bzw. wenn man dies auf die Hauptdomain weiterleiten möchte dann müsste folgendes eingetragen werden

RewriteCond %{HTTP_HOST} ^windows.voku-online.de [NC]
RewriteRule (.*) http://voku-online.de/news-c4.html [R=301,L]

 

10.) Client aussperren

Man kann auch ein bestimmtes Betriebssysteme oder Browser aussperren z.B.:

 

10.1) Internet-Explorer aussperren

RewriteCond %{HTTP_USER_AGENT} ^MSIE.*
RewriteRule ^/.* - [forbidden]

 

10.2) Windows-Computer aussperren

RewriteCond %{HTTP_USER_AGENT} ^Windows.*
RewriteRule ^/.* - [forbidden]

 

10.3) Webseiten aussperren

RewriteCond %{HTTP_REFERER} badsite.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherbadsite.com
RewriteRule .* - [forbidden]

 

11.) Umleiten der Anfrage


11.1) Weiterleitungen zur Startseite

Alternativ könnte man auch mit folgendem Befehl, eine bestimmte Anfrage zu einer neue Domain umleiten.

Redirect /altes_Verzeichnis/alte_Seite.html http://meine_domain.de/

 

11.2) Weiterleitungen (301 Redirect)

Dies nutzt man, wenn man z.B. eine Domain umgezogen hat, so dass die Suchmaschinen nicht weiter die alte Webseite in Ihren Index aufnehmen.

Redirect permanent /seite.html http://www.neue-domain.de/seite.html

 

12.) Neue Index-Datei

Standardmäßig wird eine index.php oder wenn diese nicht vorhanden ist eine index.html Datei als erstes angezeigt, wenn man sich mit einem Browser ein Verzeichnis auf einem Webserver aufruft. Mit dem folgendem Befehl kannst du bestimmen, welche Dateien als erstes angezeigt werden sollen.

DirectoryIndex filename.html index.cgi index.pl default.htm

 

13.) Webseiten Zugriff schützen


13.1) Zugriff komplett sperren

Mit folgendem Inhalt in einer “.htaccess”-Datei ist der Zugriff auf dieses Verzeichnis (und Unterverzeichnisse) komplett gesperrt

order allow,deny
deny from all

Folgendes verhindert, dass die hier spezifizierte Datei .htaccess aufgerufen werden kann. An Stelle von .htaccess kann jede beliebige Seite/Datei/Dateityp einsetzen werden

order allow,deny
deny from all

oder man bannt ein bestimmte Domain

order allow,deny
deny from .domain.de
allow from all

 

13.2) Zugriff nur nach Authentifizierung

AuthUserFile /verzeichnise.../.htusers
AuthGroupFile /dev/null
AuthName "Authorization Required"
AuthType Basic
require valid-user

Der Pfad zu der “.htusers”-Datei muss komplett angegeben werden. z.B.:

AuthUserFile /var/www/web1/web/.htusers

um diese User-Datei anzulegen kann man folgendes Kommando verwenden

htpasswd -bc .htusers test_user geheimes_passwort

und um einen weiteren Benutzer hinzuzufügen

htpasswd -b .htusers tset_user_2 geheimes_passwort

 

13.3) Zugriff nur von einem bestimmten IP-Adressen-Bereich

order deny,allow
deny from all
allow from 192.168

Somit ist nur der Zugriff nur von folgenden IP-Adressen gestattet -> 192.168.X.X

! Wichtig ! – Du solltest deine Webseite nicht nur mit einem IP-Filter Schützen, da man mittels IP-Spoofing (gefälschten Header-Infos) dann unter Umständen doch noch darauf zugreifen kann.

 

13.4) Zugriff nicht von einem bestimmten IP-Adressen-Bereich

order allow,deny
allow from all
deny from 212.26.50.10

 

14.) ErrorSeite umleiten

Zudem könnten man auch die Fehlerseiten, welche dem Benutzer angezeigt werden, wenn dieser z.B. einen Pfad auf Ihren Webseren anspricht, welcher gar nicht existiert, erhält.

ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 /errors/authreqd.html
ErrorDocument 403 /errors/forbid.html
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/serverr.html

 

15.) Slash am Ende einer Datei entfernen

Ich hatte heute das Problem, dass einer meiner Blog-Einträge falsch verlinkt wurde und so einige Leute nicht den korrekten Inhalt zu sehen bekamen, dies habe ich nun umgangen, indem der Slash am Ende der URL entfernt wird, wenn es sich nicht um ein Verzeichnis handelt und es sich um eine “.php” oder “.html” Datei handelt.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)(.php|.html)/$ /$1$2 [R=301,L]

 

16.) doppelten Slash in der URL entfernen

Wenn man doppelte Slashes in einer URL entfernen möchte …

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

 

17.) Dateien sperren


17.1) nur bestimmt Dateiendungen können heruntergeladen werden

ForceType application/octet-stream

oder man kann auch alle Dateien welche mit einen “.” Punkt beginnen, verhindern von Webserver ausgeliefert zu werden

deny from all

 

18.) .htaccess umbenennen

Bei diesem Beispiel wird in allen Unterverzeichnissen die Datei .datei als htaccess-Datei angesehen

AccessFileName .datei

 

19.) Verzeichnisauflistung an/aus

Falls sich keine Index-Datei (Startdatei) in einem Verzeichnis befindet, kann man entweder einen Fehler zurückgeben oder den Inhalt anzeigen lassen

 

19.1) Inhalt ausgeben

Options +Indexes

 

19.2) Fehler ausgeben

Options -Indexes

 

20.) Fehlermeldungen (parse-errors) ausgeben

php_flag display_errors true

 

21.) SubDomain in einen Unterverzeichnis umleiten (ohne die URL (Path) zu ändern)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub\.domain\.de$ [NC]
RewriteCond %{REQUEST_URI} !sub_domain_dir
RewriteRule ^(.*)$ sub_domain_dir/$1 [P]

 

weiter Infos:
de.selfhtml.org
httpd.apache.org

  • ubuntuxx

    Danke für de super Artikel :D

  • Sebastian

    finde ich nicht ganz so toll, z.T. fehlerhaft.
    in der gleichen länge hätte man wohl die funktionen besser erklärt.
    aber insgesamt nützlich!

  • http://www.myblogtrainer.de Chris Andersen

    Meine htaccess sieht momentan so aus:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    # END WordPress

    Bisher gab es auf einer meiner Seiten ein Zertifikat, welches nun rausgenommen wurde.
    Daher müssen in Zukunft alle existierenden https-Links im Internet auf die korrespondierenden http-Links umgeleitet werden. Wie muss der Code dann aussehen. (Momentan gibt es eine Fehlermeldung (Dieser Verbindung wird nicht vertraut…)).
    bg Chris :-)

  • http://suckup.de/about voku

    z.B.: wie oben im Beispiel …

    Code:

    RewriteCond %{SERVER_PORT} !^80$
    RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [NC,R]

    Erklärung:
    Wenn der aktuelle Port nicht gleich 80 ist … also z.B. ssl (Port 443) dann biege die URL zu http (Port 80) um …

    Info:
    - “!” -> negieren
    - “^” -> Anfang eines Strings
    - “$” -> Ende eines Strings
    - “$1″ setzt den String welcher in Klammern steht hier ein
    - “.” ein beliebiges Zeichen
    - “*” Wiederholung
    - [NC] (“no case”) kein Vergleich zwischen Groß- und Kleinschreibung
    - [R] (“force redirect”) erzwingt den Redirect
    - [L] unterbindet weitere RewriteRules (~break)