ModRewrite – Tipps, Hilfe und Erklärungen
ModRewrite: Ein Wort (genauer gesagt ein Modul) das viele Menschen lieben, einige Provider hassen es und viele wissen überhaupt nichts damit anzufangen. Daher will ich heute mal hier ein wenig darauf eingehen, ein paar Tipps geben und dem einen oder anderen eine kleine Hilfe sowie Erklärung anbieten.
Wie der Name ReWrite sagt, wird mit diesem Modul etwas umgeschrieben und das können diverse Dinge sein. Wenn der Webhoster entsprechendes mod_rewrite Modul eingebunden hat, dann könnte man so einiges machen, zum Beispiel:
- Nach einem Re-Design von den alten URLs auf die URLs der neuen Struktur umleiten
- gerne genutzt: zur Suchmaschinen-Optimierung
- ausschließen von Bots (z.B.: Spam-Bots)
- Sperrung von User-Agents oder Sperrung von bestimmten Providern bzw. IP-Adressen
- Schutz vor Diebstahl von Bildern oder Content
Alles in allem ist das Modul vielseitig einsetzbar, aber wie ich oben schon geschrieben habe, hassen es einige Provider, denn lange ReWrite Rules sorgen besonders auf stark besuchen Seiten für eine recht hohe CPU-Last. Wer die ganze Sache mal ein wenig tiefgründiger betrachten will, der schaue sich die offizielle Beschreibung an. Es gibt bei den Anweisungen sogenannte Regular Expressions, also auf gut deutsch reguläre Ausdrücke, jedoch will ich dahingehend nicht zu tiefgreifend bohren.
ModRewrite erklärt an einem Beispiel
Gucken wir uns mal ein Beispiel an, mit dieser ReWrite Rule sperrt man 2 bekannte Bots aus, die meist Seiten spidern bzw. Spam-Kommentare hinterlassen.
RewriteCond %{HTTP_USER_AGENT} ^Java [OR]RewriteCond %{HTTP_USER_AGENT} ^libwww-perlRewriteRule ^.*$ - [F]
An diesem Beispiel will ich einmal versuchen, das ein wenig näher zu bringen. Fangen wir mit dem “RewriteCond %{HTTP_USER_AGENT}” an, hier wird eine Rewrite Condition also eine Regel festgelegt, die sich wie nachfolgend zu sehen auf den HTTP_USER_AGENT bezieht. Einfach erklärt (wenn vielleicht auch nicht immer richtig), wird hier der Browser abgefragt. Danach sehen wir das Java und nun muss man mal ein wenig ausholen. Ein Zirkumflex (^) das ist dieses Dach neben der Nummer 1 auf der Tastatur stellt immer den Beginn eines String dar und ein Dollar Zeichen ($) wiederum das Ende. Es geht uns hier im Beispiel darum, mit dem User-Agent zu arbeiten und dahingehend haben wir mehrere Möglichkeiten, den zu bestimmen, wann er und wie er erkannt wird.
^Java$ – trifft zu, wenn der User Agent 1:1 als “Java” deklariert ist.
^Java – trifft zu, wenn der User-Agent mit dem Wort “Java “anfängt.
Java$ – trifft zu, wenn der User-Agent mit dem Wort “Java” endet.
Java – trifft immer zu, sobald das Wort “Java” irgendwo vorkommt.
In unserem Beispiel steht nun ^Java, ergo würde er die Regel für alles anwenden, was mit Java anfängt, so zum Beispiel Java wenn er User-Agent Java/1.6.0_16 lautet, was meist bei vielen Bots der Fall ist. Danach kommt wie wir sehen dieses [OR] und auch dies ist einfach erklärt. In unserem Fall bedeutet das [OR] das wir die Regel mit einer anderen Regel verbinden wollen (OR = ODER). Einmal wollen wir in der 1. Zeile den Java Agent ausschließen und in der nächsten Zeile schließen wir den libwww-Perl Agent aus, ergo muss die Sache so verarbeitet werden, dass wenn Condition 1 ODER Condition 2 zutrifft, der Fall XYZ eintritt. Um es kurz zu sagen, eine einfache ODER Anweisung also. Wenn wir nur das Java alleine genommen hätten, dann könnten wir uns das [OR] ersparen, bei einer weiteren Anweisung allerdings nicht.
Als Ergänzung zu [OR] gibt es noch [NC] und dies steht für “No Case”. Wozu brauchen wir das? Das macht die Regel “case insensitiv”, dass heißt entgegen den Gewohnheiten von Linux, das man sehr auf Groß- und Kleinschreibung achten muss, können wir uns mit dieser Anweisung von dem Übel befreien, dann ist egal ob der User-Agent nun “Java” oder “java” heißt, die Regel wird greifen. Wenn man [OR] und [NC] kombinieren möchte, dann müsste dort stehen [NC,OR].
Dann haben wir dort das “RewriteRule ^.*$ - [F]” mit dem wir die Anweisung geben, was denn überhaupt passieren soll, wenn der obige Fall mit dem User-Agent passiert. In unserem Fall steht hier ein [F] wie “forbidden”, denn wir möchten, dass der böse Bot einen Error 403 bekommt. Statt dem [F] hat man aber mehrere Möglichkeiten.
[R] -Redirect: Weiterleitung zu einer externen bzw. anderen Adresse (HTTP Code 302: Moved Temporarily).
[F] – Forbidden: der Zugriff ist Verboten (HTTP Code 403).
[G] – Gone: die angeforderten Daten wurden zu einem anderen URI verschoben, die nicht bekannt ist (HTTP Code 410).
[L] – Last Rule: das verarbeiten der Rewrite-Regel wird an dieser Stelle beendet.
[P] – Proxy: Diese Anweisung fordert eine Verarbeitung mit dem Proxy-Modul (mod_proxy).
ModRewrite und die unendlichen Möglichkeiten
Es gibt noch weitere so genannte CondPatterns (Condition Patterns) mit denen wir arbeiten könnten, größer als, kleiner als und vieles mehr. Das alles hier zu erklären würde zu weit führen, es gibt Menschen die schreiben über das Thema ModRewrite Bücher mit 300 Seiten und das liegt mir fern. Vielmehr wollte ich hier einen kleinen Einblick in die Materie geben, da man ja bei jedem WordPress oder jeglicher Foren-Software eine .htaccess mit einer ReWrite Rule mitgeliefert bekommt und viele Kunden nicht einmal einen kleinen Funken verstehen, was dort angewiesen wird zu tun. Und genau das hat mich auch inspiriert, diesen Artikel mal als klitzekleinen Einblick zu schreiben und die wichtigsten Anweisungen zu verstehen.
Bilder und Content Diebstahl verhindern
Da ich immer wieder mal gefragt werde, wie denn das geht mit dem Content-Diebstahl verhindern, hier passend zum Thema die entsprechende Anweisung. Wozu brauchen wir das? Es gibt Menschen, die hosten große Dateien wie Bilder nicht selber, sondern binden diese auf den eigenen Seiten mit einer fremden Quelle einfach ein. Und genau diesen Leuten kann man mit nachfolgender ReWrite Anweisung den Spaß vermießen, denn Traffic kostet Geld und warum sollte man den für den Nutzen eines fremden verbraten.
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://.*dercontentdieb\.de [NC]
RewriteRule .* - [F]
Wer selber Mod-Rewrite nutzen möchte, der braucht wie schon geschrieben einen Provider, der dies unterstützt. Wer auf Exklusivität statt Massen-Hosting und persönlichen Support Wert legt, natürlich mit funktionierendem Mod-Rewrite, dem sei BeKaWe Hosting empfohlen.
