Ebalf: Apache URL-Rewriting: RewriteCond vs. If-Else

Moin,

mehr oder weniger komplizierte Umleitungen habe ich im Apache bisher immer mit mod_rewrite und RewriteCond-Konstruktionen gemacht.

Jetzt bin ich mehr oder weniger zufällig über die If-Anweisung (Beschreibung in englisch) gestolpert, die mir so nicht bekannt, bzw. nicht bewusst war und nun frage ich mich, ob es Gründe für oder gegen eine der beiden möglichen Varianten gibt, auch im Bezug auf Performance.

Nehmen wir z.B. den ersten Eintrag aus den Beispielen zur Anweisung:

<If "%{HTTP_HOST} == 'example.com'">
    Redirect permanent "/" "http://www.example.com/"
</If>

Bisher hätte ich diese Anweisung geschrieben als:

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

Jetzt mal davon abgesehen, dass die zweite Variante auf beliebige Hostnamen matcht (das liese sich sicher noch anpassen), scheint es mir doch so, dass die erste Anweisung speziell für den Nutzer doch deutlich angenehmer zu lesen ist.

Gibt es noch gute Gründe für die RewriteCond-Varianten, oder sollte man vielleicht aus Gründen der Anwenderfreundlichkeit eher die If-Konstruktion verwenden?

  1. Tach,

    Jetzt bin ich mehr oder weniger zufällig über die If-Anweisung (Beschreibung in englisch) gestolpert, die mir so nicht bekannt, bzw. nicht bewusst war und nun frage ich mich, ob es Gründe für oder gegen eine der beiden möglichen Varianten gibt, auch im Bezug auf Performance.

    perfomance-mäßig macht das keinen relevanten Unterschied, aber es kann einen Unterschied machen; du hast ein recht einfaches Beispiel gewählt; bei komlizierteren Umschreibungen der URI wirst du innerhalb des if wieder auf mod_rewrite statt mod_alias setzen müssen und dann hast du das kompliziert aussehende RewriteRule eh schon drin. Der IF-Block bietet sich an, wenn man gleich mehrere unterschiedliche Dinge darin abhandeln will

    Gibt es noch gute Gründe für die RewriteCond-Varianten, oder sollte man vielleicht aus Gründen der Anwenderfreundlichkeit eher die If-Konstruktion verwenden?

    Ich würde behaupten, dass Anwender das nicht zu sehen bekommen, sondern nur Menschen, die administrative Einstellungen im Apache umsetzen und sobald man sich etwas damit beschäftigt hat, ist beides gleich gut lesbar (und ich habe auch gleich gesehen, dass du einen weiteren Unterschied eingebaut hast), für mod_rewrite ist halt noch ein grundlegendes Verständnis für RegExp nötig. Für die Nutzer, die du wahrscheinlich im Kopf hast, ist es egal, was du nimmst, da es sowieso nur mit c&p übernommen wird.

    mfg
    Woodfighter

  2. Tach!

    Jetzt bin ich mehr oder weniger zufällig über die If-Anweisung (Beschreibung in englisch) gestolpert, die mir so nicht bekannt, bzw. nicht bewusst war [...]

    Die Anweisung ist ja auch erst seit Version 2.4 im Apachen, und die Version hat es noch nicht überall geschafft, ausgerollt zu werden.

    dedlfix.