mod_rewrite: Webseite hat eine Umleitungsschleife

mod_rewrite: Webseite hat eine Umleitungsschleife

Ich versuche, einen Parameter zu haben, der direkt nach dem Hostnamen kommt, wie in:

www.domain.com/parameter

Aus diesem Grund habe ich die folgende RewriteRule für zwei Parameterwerte festgelegt, mit denen ich arbeiten möchte:

RewriteRule ^(en|pt)$ /index.php?language=$1&%{QUERY_STRING} [L]

Funktioniert einwandfrei! Allerdings muss ich eine neue Regel erstellen, um alle Anfragen ohne einen der aufgelisteten Parameter umzuleiten.

Aus diesem Grund dachte ich, das würde funktionieren:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

Aber leider wird eine Umleitungsschleife angezeigt.

Ich habe bekommen:

http://hostname/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt//

Ich bin für alle Tipps zur Behebung des Problems dankbar!

Antwort1

Das ist, weilVerzeichnissesind nichtreguläre Dateien.

http://httpd.apache.org/docs/current/mod/mod_rewrite.html(kein HTML-DOM idfür den Snippet! Das nächste ist ein nicht verwandtes LA-U, sogar das, was ein hätte sein sollen, id="LA-F"fehlt!)

Sie können verschiedene Dateiattributtests durchführen:

'-d' (is directory)
Treats the TestString as a pathname and tests whether or not it exists, and is a directory.
'-f' (is regular file)
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.

Vorausgesetzt, der Rest Ihrer Konfiguration ist korrekt (ich bin nicht sicher, ob das Hinzufügen eines abschließenden Schrägstrichs eine gute Idee ist), sollten Sie eine zusätzliche Bedingung für Folgendes hinzufügen !-d:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

Erwägen Sie auch einen Wechsel zu nginx! Es hat nicht nur eine klarere Syntax, die besser auf den allgemeinen Gebrauch ausgerichtet ist, sondern auch direkte Links zu relevanter Dokumentation, wie zum Beispiel:http://nginx.org/r/if.

Überprüfen der Existenz einer Datei, eines Verzeichnisses oder eines symbolischen Links mit den Operatoren „-e“ und „!-e“;

Antwort2

%{REQUEST_URI}ist der URI-Pfad, der direkt auf den Hostnamen folgt und daher mit dem Schrägstrich beginnt:/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(en|pt)$
RewriteRule ^.*$ /pt/$0/ [R=301,L]

verwandte Informationen