.htaccess Beispiele
BananaJoes .htaccess Beispiele
Mit Hilfe der .htaccess Datei, kann man so manches möglich
machen, was anders nicht, oder nur mit erheblichem Mehraufwand zu
erreichen ist.
Nahezu jede Direktive kann mittels der .htaccess Datei
"überschrieben" werden, allerdings erlaubt nicht
jeder Provider den Einsatz der .htaccess Datei, oder
beschränkt sie auf ein Minimum an Funktionalität.
In solch einem Fall ist einfaches Ausprobieren oder den Provider
fragen angesagt.
- SSI Serversideincludes in einfachen .html Dateien verwenden
- URL Umleitung
- Einfacher Passwortschutz
- Bilder schützen
- User aussperren
- Eigene Fehlerseiten definieren
- Clients aussperren
1. SSI Serversideincludes in einfachen .html Dateien verwenden
Da hat man nun seine ganze Website fertig, in den Suchmaschinen
ist sie auch schon aufgenommen und ein paar nette Leute haben einen
auch schon verlinkt.
Jetzt möchte man aber ein paar SSI Funktionen benutzen, doch
dies geht nur, wenn man die Dateien umbenennt, z.B. von index.html
nach index.shtml.
Folge: Die Seite wird nicht mehr gefunden, Links führen ins
Leere.
Was nun?
Zum Glück hält der Apache für solche Fälle ein
paar Direktiven bereit, die dieses Problem lösen.
Erste Methode:
Man "zwingt" den Server dazu alle
*.html Dateien zu paarsen.
Das kann man mit folgendem Eintrag in der .htaccess erreichen:
Addhandler server-parsed .html
Dies ist allerdings eine meiner Meinung nach wenig elegante
Methode, wo doch so auch Seiten gepaarst werden, wo es nix zu
paarsen gibt, zudem kann unter Umständen soagr die Performance
des Servers dadurch beinträchtigt werden (aber auch nur wenn
extrem viele Zugriffe erfolgen).
Die zweite Methode ist der XBitHack.
Zweite Methode:
Mit der XBitHack Direktive kann gezielt das Paarsen ganz
normaler HTML Dokumente gesteuert werden. Diese Direktive ist
allerdings nur auf Dateien anwendbar, die dem MIME
Typ text/html zugeordnet sind, also eben ganz normale HTML
Dateien.
Desweiteren muss die Datei, die gepaarst werden soll, als
"Ausführbar" gekennzeichnet sein, in den
Dateiattributen muss also das "execute" Bit gesetzt
sein.
Folgendes wird in die .htaccess Datei eingetragen, um die XBitHack
Direktive zu nutzen:
XBitHack on
Zudem müssen für für
jede Datei, auf die die XBitHack Direktive
angewendet wird, die Ausführungsrechte gesetzt sein, d.h. das
Datei Attribut "Ausführbar (execute)" muss gesetzt
sein. Unter Linux/UNIX einfach auf die entsprechende Datei ein
"chmod 744 oder 755" ausführen.
Benutzer der FTP Software WSFTP-Pro können über die in
WSFTP eingebauten FTP-Befehle die entsprechenden Rechte setzen.
"on" schaltet den XBitHack ein, statt "on"
kann man noch "off" und "full" verwenden.
Mit "off" schaltet man die Direktive aus (das ist
übrigens auch die Standardeinstellung des Servers), und
"full" ist im Prinzip dasselbe wie "on", nur
dass zusätzlich das "group-execute bit" der Datei
ebenfalls gesetzt sein muss.
Das Ganze hört sich komplizierter an, als es ist, etwas Erfahrung im Umgang mit Dateien und Dateiattributen ist allerdings Vorraussetzung.
2. URL Umleitung
Einzelne Seiten in ein anderes Verzeichnis verschoben?
Die komplette Domain auf eine andere Domain weiterleiten?
Kein Problem mit diesen Direktiven:
Redirect url-pfad url
Beispiel:
Redirect /index.html
http://www.eineganzanderedomain.de/index.html
oder: Redirect /verzeichnis
http://www.selbedomain.de/aber/anderes/verzeichnis
url-pfad muss als absoluter Pfad angegeben werden, eine Angabe als relativer Pfad funktioniert nicht.
Möglich ist aber auch RedirectMatch, diese Direktive arbeitet genauso wie Redirect, nur mit dem Unterschied, dass hier "reguläre Ausdrücke" zur Anwendung kommen können.
RedirectMatch regex url
Beispiel:
RedirectMatch (.*)\.gif$
http://www.anderedomain.de$1.jpg
Hier werden alle Aufrufe von *.gif Dateien auf gleichnamige *.jpg
Dateien auf einem anderen Server umgeleitet.
Beispiel2:
RedirectMatch (.*)\cmd.exe$
http://www.microsoft.com
Da in letzter Zeit einige Würmer zu zweifelhafter
Popularität gelangt sind, kann man mittels RedirectMatch
Anfragen solcher Würmer an den eigenen Server an eine bekannte
Firma aus Redmond weiterleiten ;-).
3. Einfacher Passwortschutz
Ein bestimmter Bereich der Website soll nur Auserwählten
zugänglich gemacht werden?
Mit der .htaccess Datei überhaupt kein Problem.
Folgendes sollte in der .htaccess stehen:
AuthType Basic
AuthName plantage
AuthUserFile Pfad zur Passwortdatei
require valid-user
In der Passwortdatei stehen die berechtigten User und ihr "verschlüsseltes" Passwort.
Etwas ausführlicher ist dieses Verfahren hier beschrieben.
4. Bilder schützen
Ständig verlinken andere Websites auf Deine Kunstwerke, sie
binden sie einfach per URL in ihre Webseiten ein und verursachen so
nur zusätzlichen Traffic auf der eigenen Seite.
So kann man es unterbinden:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?bananajoe.de/.*$
[NC]
RewriteRule \.(gif|jpg)$ - [F]
Erklärung:
RewriteEngine on Hiermit wird die Rewriting Engine des Apache aktiviert.
Mit RewriteCond werden die Bedingungen definiert, wann die RewriteRule Direktive anzuwenden ist.
RewriteCond %{HTTP_REFERER} !^$
Der HTTP-Referer (Der HTTP-Referer ist der URL der Seite, aus der
der abgerufene Link angeklickt wurde) darf nicht
mit der Bedingung ^$ übereinstimmen, (das
"!" steht für nicht).
RewriteCond %{HTTP_REFERER}
!^http://(www\.)?bananajoe.de/.*$ [NC]
Hier darf der empfangene Referer nicht mit dem
der eigenen Seite übereinstimmen.
[NC] steht für "no case" und besagt, dass
bei dem Vergleich nicht zwischen Groß- und Kleinschreibung des
Referers unterschieden wird.
http://www.lrz-muenchen.de/services/schulung/unterlagen/regul/
http://develnet.org/tech/dclp/regexp.html
http://www.ideenreich.com/programmierung/regulaere_ausdruecke.shtml
Jetzt folgt die RewriteRule, die Regel die angewendet
wird, wenn die vorhergehenden Bedingungen zutreffend sind.
\.(gif|jpg)$ - [F] der Zugriff auf Dateien mit den
Endungen .gif und .jpg ist verboten
[F] steht für "forbidden" und liefert den
Statuscode 403 - forbidden zurück.
Und so kann man dem Bilderdieb sogar noch ein anderes Bild unterschieben:
<FilesMatch "\.(gif|jpe?g|png|bmp|pdf|zip|rar|mp3|js)$">
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?bananajoe.de/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !dieb.gif$
RewriteRule .*\.(gif|jpe?g|png|bmp|pdf|zip|rar|mp3|js)$ http://www.bananajoe.de/images/dieb.gif [R]
</FilesMatch>
Erklärung:
Die RewriteRule besagt jetzt, dass bei dem Aufruf einer
beliebigen Datei mit der in der FilesMatch Direktive genannten Endungen, dieser Aufruf auf
eine andere Datei umgelenkt wird.
[R] steht für "force redirect", was den
Redirect erzwingt.
5. User aussperren
Surfer die von ganz bestimmten Domains kommen dürfen nicht auf die Seiten drauf?
Benutzer von einer bestimmten IP-Adresse dürfen nicht auf den Server zuzugreifen. Alle anderen dürfen ;-). Macht eigentlich wenig Sinn, da die meisten Surfer mit eine dynamischen IP-Adresse unterwegs sind.
deny from 80.132.187.109 dies ist
übrigens eine T-Online IP ;-)
Besser ist dies:
order deny,allow
allow from 80.132.187.109
deny from all
Surfer aus einer ganz bestimmten Domain dürfen auf die
Seite drauf, alle anderen müssen leider draußen bleiben.
Das "order deny,allow" heißt, dass die
"deny" (Verbots) Regel vor der
"allow" (Erlaubnis) Regel abgearbeitet wird.
"allow from ip-adresse oder ein domain-name"
gibt die Erlaubnis zum Betreten der Website für alle Besucher,
die von dieser einen IP-Adresse aus kommen.
"deny from all" ist das Betreten verboten Schild
für alle anderen.
Bei über das Internet zugänglichen Seiten
übrigens ein schwieriges Unterfangen, da ja wie oben gesagt,
die meisten Surfer mit wechselnden IP-Adressen unterwegs
sind.
Man könnte so allerdings alle AOL oder T-Online Nutzer
ausperren, sofern einem die von diesen Providern verwendeten
IP-Adressen bekannt sind ;-)
6. Eigene Fehlerseiten definieren
Die Standardseiten, die der Apache liefert, wenn etwas nicht
gefunden wurde sehen ziemlich bescheiden aus.
So kann man den Webserver dazu bringen stattdessen andere, viel
schönere Seiten anzuzeigen.
ErrorDocument 402
http://www.domain.de/402.html
ErrorDocument 403 http://www.domain.de/403.html
ErrorDocument 404 http://www.domain.de/404.html
Sollte eigentlich soweit selbsterklärend sein ;-)
7. Clients aussperren
Mit sogenannten Offline-Readern oder Websaugern ist es
möglich ganze Website mit einer hohen Geschwindigkeit
herunterzuladen.
Diese Programme erzeugen dabei nicht selten Unmengen von 404
Fehlern in den Serverlogs und jede Menge unnötigen
Traffic.
Möchte man vermeiden, dass diese Programme auf die eigene
Website zugreifen können, so lässt sich das mittels der
RewriteEngine erledigen.
Beispiel:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^ClientXYZ.*
RewriteRule ^/.* - [forbidden]
Kommt eine Anfrage vom ClientXYZ, so wird ihm über die RewriteRule der Zugriff verweigert.
Es ist möglich mehrere Clients gleichzeitig auszusperren, für jeden dieser Clients ist dann eine eigene RewriteCond Anweisung nötig, die mit einem logischen ODER verknüpft werden.
Beispiel:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^ClientABC.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ClientXYZ.*
RewriteRule ^/.* - [forbidden]
Noch einen Schritt weiter kann man gehen, wenn man einem ganz bestimmten Client, der von einer ganz bestimmten Domain stammt aussperren möchte.
Beispiel:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^ClientABC.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ClientXYZ.*
RewriteCon %{REMOTE_HOST} ^www\.anderedomain\.tld$ [NC]
RewriteRule ^/.* - [forbidden]
anstatt den Zugriff zu verbieten, kann man natürlich auch eine Umleitung einrichten.
Beispiel:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^ClientABC.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ClientXYZ.*
RewriteCond %{REMOTE_HOST} ^www\.anderedomain\.tld$ [NC]
RewriteRule ^/index\.html$ /error.html [R,L]
Versucht ClientABC oder ClientXYZ von der Domain www.anderedomain.tld kommend auf die Seite index.html zuzugreifen, so wird ihm stattdessen die Seite error.html präsentiert.
Um diese Regeln effektiv anwenden zu können, muss einem
natürlich der HTTP_USER_AGENT des zu sperrenden Clients
bekannt sein.
Eine Liste der USER_AGENTS findet sich hier.
So könnte der Inhalt der .htaccess aussehen:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^WebCopy.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetcher.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebMirror.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^fetch.*
RewriteRule ^/.* - [forbidden]
Diese Art des Ausschliessens bietet leider keine 100%
Sicherheit, da die meisten Programme zum Sitedownload in der Lage
sind sich zu tarnen, d.h. sie bieten die Option ihren USER_AGENT zu
verändern.
Den USER_AGENT Mozilla auszusperren sollte man tunlichst
vermeiden, da die meisten Browser sich als Mozilla
identifizieren.