Jörgs Webnotizen

Wann und wie oft „RewriteEngine on“?

Mithilfe des Apache-Moduls mod_rewrite können URLs auf vielfältige Weise umgeschrieben oder weitergeleitet werden. Damit mod_rewrite Direktiven in einer .htaccess Datei oder der VHost-Konfigurationsdatei ausgeführt werden, muss zuerst die Rewrite-Engine mit folgender Direktive eingeschaltet werden:


RewriteEngine on

Bisweilen wird diese Zeile aber auch unnötigerweise gesetzt. Manchmal sieht man z.B. einen solchen Code-Abschnitt in der .htaccess Datei:


RewriteEngine on
RewriteRule ^bar$ https://example.com/foo-bar [R=301,L]

RewriteEngine on
RewriteRule ^baz$ https://example.com/baz-foo [R=301,L]

# etc.

Die Rewrite-Engine muss nur einmal pro .htaccess Datei eingeschaltet werden, das zweite und alle weiteren „RewriteEngine on“ sind hier also überflüssig und blähen den Code unnötig auf. Einmal reicht:


RewriteEngine on

RewriteRule ^bar$ https://example.com/foo-bar [R=301,L]
RewriteRule ^baz$ https://example.com/baz-foo [R=301,L]
# etc.

Aber auch im folgenden Fall, den man gar nicht so selten antrifft, wird diese Direktive nicht benötigt:


RewriteEngine on
Redirect 301 /bar https://example.com/foo-bar

Die Redirect-Direktive ist nicht Bestandteil von mod_rewrite, sondern von mod_alias. Ein Einschalten der Rewrite-Engine ist hier also nicht notwendig, es sei denn, es folgen weiter unten noch mod_rewrite Direktiven im .htaccess-Code. Ansonsten kann man das „RewriteEngine on“ hier getrost entfernen:


Redirect 301 /bar https://example.com/foo-bar

Die Direktiven von mod_rewrite sind daran zu erkennen, dass sie alle mit einem „Rewrite“ anfangen (RewriteEngine, RewriteRule, RewriteCond, RewriteBase).

Man kann die Rewrite-Engine des Apachen übrigens auch abschalten:


RewriteEngine off

Damit können z.B. in einem Unterverzeichnis mod_rewrite Direktiven der .htaccess Datei eines übergeordneten Verzeichnisses außer Kraft gesetzt werden.

Tags: Apache

Kommentar schreiben

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Kommentare werden erst nach Freischaltung veröffentlicht