Reihenfolge von mod_rewrite Direktiven
- die Reihenfolge verbieten – weiterleiten – umschreiben
- spezielle Regeln vor allgemeinen Regeln
Beispiel-Code zur Illustration dieser Grundsätze:
RewriteEngine on
RewriteBase /
# 1. Verbot
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://%{HTTP_HOST}
RewriteRule \.gif|\.jpe?g|\.png$ - [NC,F,L]
# 2. Weiterleitung
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://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.com nach www.example.com. Erst wenn der Browser oder Bot nach einer 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 auf die internen Dateipfade umschreiben. Die zweite, allgemeinere Rule muss hintenangestellt werden, da sie anderfalls auch URLs rewriten würde, welche nur durch die erste, speziellere Rule erfasst werden sollen.
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.