Hauptmenü

Untermenü

.htaccess - mod_rewrite Teil 4

1. Die Abschnitte

2. Da oder nicht da

Beim vorherigen Beispiel hab ich euch gezeigt, wie man URLs so umschreiben kann, dass sie auf etwas verweisen, das eigentlich gar nicht existiert. Was passiert aber, wenn man mal auf Dateien oder Ordner verlinken will, die es doch gibt? Dazu nehmen wir uns den Ordner mod_rewrite_4 vor. Der Unterschied besteht darin, dass es eine Datei namens link.php und einen Ordner mit gleichem Namen gibt. Der wiederum beinhaltet eine index.htm. In der index.php wird dann auf beide verlinkt.

So

Wenn ihr auf die ersten beiden Links klickt, so ist alles wie gehabt. Aber was ist mit den anderen beiden? Da geht erst mal nichts und ihr bekommt einen 404 um die Ohren gehauen. Das liegt schlicht und ergreifend daran, dass eure bisherige Regel für diesen Fall nicht ausgelegt ist.

3. Bedingungen

Mit denen legt man fest, wann und ob eine Regel greifen soll. In diesem Fall wollen wir also zwei Ausnahmen von der Regel definieren. Eine Bedingung selber definiert man über RewriteCond, dann folgt eine Zeichenkette (dazu gleich mehr) und am Ende ein Parameter.

4 Existierende Dateien ausnehmen

Dazu ergänzt man die .htaccess um den folgenden Eintrag.


RewriteCond %{REQUEST_FILENAME} !-f

Erläuterung

Beim %{REQUEST_FILENAME} handelt es um eine vorgegebene Serverkonstante. In unserem Fall geht es also um den Namen der aufgerufenen Datei. Das sieht man am Parameter -f, wo das "f" für file steht. Im Beispiel handelt es sich dann um die link.php. Und das Ausrufezeichen ! ist eine Negation, soll heißen, wenn es die Datei XY gibt, so werden die festgelegten Regeln in diesem Fall ignoriert.

4 Existierende Ordner ausnehmen

Das ist nun ganz einfach. Anstelle des -f nimmt man ein -d. Das "d" steht dann für directory.


RewriteCond %{REQUEST_FILENAME} !-d

Ein Hinweis

In unserem Beispiel verlinken wir ja nur auf den Ordner ordner. Und warum bekommen wir dann die darin befindliche index.htm angezeigt? Ganz einfach, wegen des so genannten DirectoryIndex. Aber obacht! Wenn ihr bei Ordnern nicht das DirectoryListing (siehe Link weiter unten) entsprechend eingestellt habt, so bekommt ihr automatisch eine Fehlermeldung, wenn sich in besagtem Ordner keine Datei befindet, die ihr im DirectoryIndex angegeben habt.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt