.htaccess - mod_rewrite Teil 4
1. Die Abschnitte
- Einführung
- mod_rewrite Teil 1
- mod_rewrite Teil 2
- mod_rewrite Teil 3
- mod_rewrite Teil 4
- Weiterleitungen
- Aussperren Teil 1
- Aussperren Teil 2
- Zugriffsschutz Teil 1
- Zugriffsschutz Teil 2
- PHP-Einstellungen Teil 1
- PHP-Einstellungen Teil 2
- Fazit
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