Zuerst werde ich Ihnen sagen, wie Sie Ihre RewriteRule lesen können:
Sie beginnen mit dem ersten (oder nächsten) RewriteRule-Eintrag:
%code%
Der erste Parameter ist ein regulärer Ausdruck, der der angeforderten URL entsprechen kann. %code% stimmt mit allem überein und speichert dieses "alles" in einer Variablen, die später verwendet werden kann.
Nur wenn vorhergehende RewriteCond-Einträge vorhanden sind, werden sie als nächstes ausgewertet:
%code%
%code% ist ein Verweis auf den Inhalt, der in den ersten Klammern von RewriteRule gefunden wurde. Dies wird mit dem zweiten Parameter verglichen, der ein regulärer Ausdruck ist, der mehrere explizite Namen angibt, und der %code% negiert den Ausdruck, z. Diese Regel erlaubt die Ausführung der RewriteRule nur, wenn die Regex nicht übereinstimmt. Wenn diese Bedingung wahr zurückgibt, wird die nächste Bedingung betrachtet.
%code%
Wenn der angeforderte Dateiname keine echte Datei auf der Festplatte ist, ist diese Bedingung wahr.
%code%
Wenn der angeforderte Dateiname kein echtes Verzeichnis ist, ist diese Bedingung wahr.
Nur wenn alle diese Bedingungen zutreffen (sie sind zusammen mit AND verkettet), kommen wir zurück zur Umschreiberegel:
%code%
Das Ergebnis dieses Umschreibschritts wird als zweiter und dritter Parameter definiert. %code% wird wieder wie für den Inhalt der Übereinstimmung verwendet, und die Parameter definieren, dass diese Regel, wenn sie anfänglich übereinstimmt, die letzte Regel (L) ist und dass jede im Umschreibeziel definierte Abfragezeichenfolge an eine beliebige angehängt wird Abfragezeichenfolge in der ursprünglichen URL (QSA).
Kritik:
Das übliche Umschreiben für MVC-Frameworks versucht, so performant wie möglich zu sein. Ihre Umschreibungsbedingungen müssen alle für eine erfolgreiche Umschreibung ausgewertet werden. Die Option wird nur angehalten, wenn einer der RewriteCond-Werte false zurückgibt. Jede Anforderung, die neu geschrieben wird, unterliegt zahlreichen CPU-intensiven Tests. Zuerst die RewriteRule Regex, dann die Regex in der ersten RewriteCond, gefolgt von zwei Harddisk-Tests auf dem Dateisystem für die Datei Existenz.
Auf der anderen Seite scheint der erste RewriteCond unnötig zu sein. Es prüft auf bestimmte Namen und bricht das Neuschreiben ab. "index.php" sollte vom zweiten RewriteCond erkannt werden, da es sich um eine existierende Datei handelt (wie würde das Umschreiben funktionieren, wenn nicht). Alles, was mit "Ressourcen" beginnt, wird ebenfalls angepasst, aber wahrscheinlich nicht aus den gleichen Gründen: Vorhandene Ressourcen werden vom zweiten RewriteCond gefunden. Zuletzt die Datei "robots.txt". Es ist immer eine gute Idee, eine zu haben, möglicherweise empty, wenn Sie 404 vermeiden möchten, wenn Roboter Ihre Site holen.
Da Sie nichts in der Abfragezeichenfolge ändern, wird die [QSA] -Direktive nicht benötigt.
Verbesserungen:
%Vor%
Die erste RewriteRule stimmt mit dem gesamten angeforderten Pfad überein. Die beiden RewriteCond sind mit [OR] verbunden, sodass der erste RewriteCond, der True zurückgibt, die weitere Auswertung abbricht. Der erste RewriteCond testet, ob die angeforderte Datei existiert. Wenn es existiert, wird true zurückgegeben und die Verarbeitung kehrt zur ersten RewriteRule zurück. Der Zielausdruck ist "-", was "nicht neu schreiben" bedeutet. Der [L] stoppt die weitere Verarbeitung der Umschreibregeln. Am Ende haben wir für eine existierende Datei nur einen Regex- und einen Dateisystemtest, und danach wird diese existierende Datei an den Browser gesendet.
Wenn keine Datei gefunden wurde, werden die erste RewriteRule und RewriteCond nicht ausgelöst, daher wird [L] dort den Prozess nicht stoppen. Also wird die zweite RewriteRule ausgeführt. Dieser ist unconditional, und die Regex ist die gleiche wie zuvor, stimmt mit allem überein und schreibt es in "index.php" um.
Dieses Umschreiben ruft Ihre index.php nicht auf, wenn eine Datei existiert, einschließlich /forum/login.php.
Sie können die zweite in %code% ändern, wenn Sie weiterhin %code% statt %code% analysieren möchten.
___ qstntxt ___
Meine Seite leitet aufgrund meiner .htaccess-Datei, die wie folgt eingestellt ist, nicht um:
%Vor%
Ich benutze dieses Setup für mein MVC Framework, also erhalte ich URLs wie %code% , aber wenn ich nach /forum/login.php umadressiere, schneidet es nach / forum /.
Wie kann ich das als Ausnahme hinzufügen, damit ich nach %code%
umleiten kann?
Ich habe eine andere .htaccess in meinem / forum / Verzeichnis gefunden, könnte das auch das Problem verursachen?
%Vor%
___ answer12865847 ___