6 Stimmen

RewriteCond überprüfen, ob das Verzeichnis mit einer Indexdatei vorhanden ist

Ich versuche eine Umleitung für alle Anfragen zu machen, AUSSER wenn die URL auf Folgendes zeigt:

  • Eine vorhandene Datei
  • Ein Verzeichnis mit einer Indexdatei

Also habe ich das Folgende, das damit umgehen sollte:

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ redirect.php [QSA]

Aber wenn ich zu einem Ordner navigiere, der eine index.php enthält (und ja, ich habe überprüft, dass DirectoryIndex auf index.php gesetzt ist), wird die Umleitung immer noch durchgeführt.

Das Lustige, das ich auch festgestellt habe, ist, dass wenn ich ein .htaccess in diesem Ordner mit RewriteEngine on (nur das) habe, dann funktioniert die obige Umleitungsregel...

Irgendwelche Hinweise?

6voto

Jon Lin Punkte 139414

Sie müssen den Verzeichnisteil überprüfen:

RewriteCond %{REQUEST_FILENAME}/index\.php !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ redirect.php [QSA,L]

Außerdem:

Das Lustige, was ich auch gefunden habe, ist, dass wenn ich eine .htaccess-Datei in diesem Ordner mit RewriteEngine on (nur das) hätte, dann funktioniert die Rewrite-Regel oben...

Dies liegt daran, dass Rewrite-Regeln in Unterverzeichnissen Vorrang vor Regeln in übergeordneten Verzeichnissen haben. Wenn Sie also ein Unterverzeichnis mit RewriteEngine On haben, ohne Regeln, bedeutet dies, dass dieses Unterverzeichnis Vorrang vor Rewrite-Regeln im übergeordneten Verzeichnis hat und es keine Regeln gibt (etwas verwirrend).

5voto

anubhava Punkte 713155

Versuchen Sie diese Regel in Ihrer Root .htaccess-Datei:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/index.php !-f
RewriteRule ^(.*?)/?$ redirect.php [L]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X