Verzeichnis beim mod_rewrite durchlassen

06. Oktober 2006 Bisher 5 Kommentare

Im Zuge von sauberen und verständlichen URLs kommt eine Einrichtung wie gerufen: mod_rewrite, anderen auch geläufig wenn ich von .htaccess rede. Über diese kann man aus index.php?p=rechnungen&status=bezahlt schön formatierte URLs nach dem Schema /rechnungen/bezahlt.html machen. Was ist denn aber, wenn ich Verzeichnisse oder Anweisungen nicht von htaccess behandelt wissen möchte?

Wer beispielsweise der URL /rechnungen/bezahlt.html in Parameter für php umwandeln möchte, braucht in der .htaccess nur folgendes einzutragen:

RewriteEngine On RewriteRule ^([\w]+)\/([\w]+)($|\/$|\.html$) /index.php?bereich=$1&status=$2 {L,QSA}

Was ist denn nun aber, wenn ich ein Verzeichnis habe, welches tatsächlich existiert, und von htaccess ausgenommen werden sollte, wie ein zu Testzwecken eingerichtetes phpMyAdmin? In mod_rewrite geht das so:

RewriteRule ^phpMyAdmin – [L]

Eigentlich ganz einfach, oder?

Kommentare

Einen eigenen Kommentar schreiben

  1. 1 Hasch schrieb am 08. Oktober 2006 (09:10 Uhr)

    Wesentlich interessanter wäre es allerdings, wenn man eine Rewrite-Rule schreibt, welche prüft, ob das Verzeichnis exestiert und es dann als eine solche Regel ansieht ohne jedes Verzeichnis einzelln eintragen zu müssen.

  2. 2 macx schrieb am 08. Oktober 2006 (12:10 Uhr)

    So weit ich weiß, kann die htaccess nicht prüfen, ob etwas existiert, wäre aber wirklich interessant.

  3. 3 Michael schrieb am 09. Oktober 2006 (13:10 Uhr)

    Müsste es nicht &status=$2 statt &status=S2 heißen?
    Wofür steht eigentlich {L,QSA}?

  4. 4 macx schrieb am 09. Oktober 2006 (13:10 Uhr)

    Selbstverständlich, hast Recht. Hab das geändert.
    “L” steht für den letzten Eintrag. Du könntest ja auch die Bedingung durchlaufen lassen, und danach die folgenden Bedinungen testen, ob die besser passen. L verhindert das. QSA übermittelt die Query.

  5. 5 Daniel Jagszent schrieb am 12. Oktober 2006 (19:10 Uhr)

    meines Wissens reicht ein

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    vor der RewriteRule.

    Das wendet die Regel nur an, wenn es sich nicht um eine Datei (-f) oder ein Verzeichnis (-d) handelt.

    Das wird z.B. auch so in deinem WordPress so gemacht, einfach mal in das .htaccess schauen, dass WordPress generiert hat. :)