Reihenfolge von Modrewrite-Rules

29.08.2008 In meinem Webmaster-Forum stellt sich in Threads zum Einsatz von Modrewrite in .htacess Dateien oft auch die Frage nach der Reihenfolge von Modrewrite-Rules. Folgende zwei Grundsätze empfehle ich hierzu zu beachten:

Zur Illustration hier ein Beispiel:

RewriteEngine on

RewriteBase /

# 1. Verbot
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://%{HTTP_HOST}
RewriteRule \.gif|\.jpe?g|\.png$ - [NC,F,L]

# 2. Weiterleitung
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# 3. Umschreibungen
RewriteRule ^foo-([0-9]+)\.html$ foo.php?bar=$1 [L]
RewriteRule ^(.+)\.html$ index.php?bar=$1

Die erste Rule bewirkt, dass Bilder mit einem fremden Referrer nicht angezeigt werden. Solche und andere Verbote sollten natürlich vor den Weiterleitungen aufgeführt werden: eine Weiterleitung vor der Verbotsregel würde nur unnützen Traffik erzeugen.

An zweiter Stelle folgt die Weiterleitung von example.org nach www.example.org. Erst wenn der Browser oder Bot nach der Weiterleitung die betreffende Seite unter der korrekten URL aufruft, macht es Sinn, die URLs umzuschreiben, um den Inhalt auszugeben.

Am Ende folgen die Rules, welche suchmaschinenoptimierte URLs intern auf die eigentlichen Adressen umschreiben. Da die zweite, allgemeinere Rule auch URLs umschreiben würde, welche durch die erste, speziellere Rule umgeschrieben werden sollen, muss diese hintenangestellt werden.

In den Fällen 1. bis 3. sorgt das [L]-Flag dafür, dass bei einem Zutreffen der betreffenden Regel keine nachfolgenden Rules mehr ausgeführt werden.