Timbo: mod_rewrite Flag [L]

Hallo,
probiere gerade ein bisschen mit mod_rewrite herum. Das Flag "L" sollte doch eigentlich laut Docu die Rule-Schleife abbrechen, z.B.

RewriteRule ^hallo.html$ /index.php [L]
RewriteRule ^index.php$ /test.php

Eigentlich sollte mit Flag die index.php angezeigt werden. Stattdessen erhalte ich aber die test.php. Was läuft da falsch?

Grüße Timbo

  1. echo $begrüßung;

    probiere gerade ein bisschen mit mod_rewrite herum. Das Flag "L" sollte doch eigentlich laut Docu die Rule-Schleife abbrechen, z.B.

    RewriteRule ^hallo.html$ /index.php [L]
    RewriteRule ^index.php$ /test.php

    Eigentlich sollte mit Flag die index.php angezeigt werden. Stattdessen erhalte ich aber die test.php. Was läuft da falsch?

    Nach dem Umschreiben wird ein neuer interner Request mit dem Umschreib-Ergebnis gestartet, der wieder alle relevanten Konfigurationsdateien abklappert und für den dann deine zweite Zeile gilt. Den genauen Ablauf kannst du dir im RewriteLog ansehen. Um das einzurichten, musst du aber Zugriff auf die Apache-Konfiguration haben.

    echo "$verabschiedung $name";

    1. Das Flag "L" sollte das doch eigentlich verhindern, oder habe ich mich da geirrt?

      1. echo $begrüßung;

        Das Flag "L" sollte das doch eigentlich verhindern, oder habe ich mich da geirrt?

        Nein, es verhindert nur die Auswertung der nachfolgenden Regeln in _dieser_ Konfiguration für _diesen_ Request. Aufgrund der technischen Besonderheiten beim URL-Rewritung auf Verzeichnisebene im Apachen ist der erwähnte interne Redirect erforderlich. Der durchläut die komplette Behandlung im Apachen erneut. Die Handbuch-Kapitel zum URL-Rewriting beschreiben den Vorgang noch genauer als ich es hier tun kann.

        Wie du doch noch zu deinem Ziel kommst, kann ich dir grad nicht sagen. Für die gegebene Information fällt mir kein Weg ein, das zu realisieren. Ein geringfügig anderes Verhalten legt mod_rewrite an den Tag, wenn die Umschreibung im selben Verzeichnis bleibt. Dann erkennt mod_rewrite in bestimmten Situationen, dass bereits umgeschrieben wurde. Du schickst jedoch durch den vorangehenden / den internen Redirect in ein anderes Verzeichnis. Jedenfalls wird das so angesehen. Nimm dir am besten mal die Kapitel zu mod_rewrite vor und verfolge das RewriteLog bei deinen Versuchen. Das wirkt zwar auf den ersten Blick recht erschlagend, doch zeigt es auch, wie aufwendig so ein Rewrite-Prozess ist.

        Vielleicht kannst du auch die zweite RerwiteRule beim internen Redirect mithilfe von RewriteCond(itions) außer Kraft setzen. Ich vermute, dass man mit THE_REQUEST, REQUEST_URI oder REQUEST_FILENAME, vielleicht aber auch mit IS_SUBREQ was anstellen kann. Verfolge bei deinen Tests stets das RewriteLog, damit du weißt, woran der Versuch scheitert. bzw. siehst, wie mod_rewrite auf Änderungen reagiert.

        echo "$verabschiedung $name";