Ihre Umschreiberegel sieht fast in Ordnung aus.
Stellen Sie zunächst sicher, dass sich Ihre .htaccess
Datei im Stammverzeichnis Ihres Dokuments befindet (am selben Ort wie index.php
). Andernfalls wirkt sich dies nur auf den Unterordner aus, in dem sie sich befindet (und alle darin enthaltenen Unterordner - rekursiv).
Nehmen Sie als Nächstes eine geringfügige Änderung an Ihrer Regel vor, damit sie ungefähr so aussieht:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
Im Moment sind Sie passende gerade auf .
dem eine Instanz von einem beliebigen Zeichen, müssen Sie zumindest ein .*
beliebige Anzahl von Instanzen von einem beliebigen Zeichen übereinstimmen.
Die $_GET['path']
Variable enthält beispielsweise die gefälschte Verzeichnisstruktur /mvc/module/test
, die Sie dann in index.php verwenden können, um den Controller und die Aktionen zu bestimmen, die Sie ausführen möchten.
Wenn Sie möchten, dass der gesamte Shebang in einem Unterverzeichnis installiert wird, z. B. /mvc/
oder /framework/
am wenigsten kompliziert, ändern Sie die Umschreiberegel geringfügig, um dies zu berücksichtigen.
RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]
Stellen Sie sicher, dass Sie index.php
sich in diesem Ordner befinden, während sich die .htaccess
Datei im Dokumentstamm befindet.
Alternative zu$_GET['path']
(aktualisiert am 18. Februar und 19. Januar)
Es ist eigentlich nicht notwendig (oder auch nicht üblich), den Pfad als $_GET
Variable festzulegen. Viele Frameworks verlassen sich darauf $_SERVER['REQUEST_URI']
, dass dieselben Informationen abgerufen werden - normalerweise, um zu bestimmen, welcher Controller verwendet werden soll -, aber das Prinzip ist genau das gleiche.
Dies vereinfacht die RewriteRule
leicht , wie Sie das nicht brauchen , erstellen Pfad Parameter (was bedeutet , dass das Original des OP RewriteRule
wird jetzt Arbeit):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
Es gilt jedoch weiterhin die Regel zur Installation in einem Unterverzeichnis, z
RewriteRule ^.*$ /mvc/index.php [L,QSA]
Die Flaggen:
NC
= Keine Groß- / Kleinschreibung (nicht zwischen Groß- und Kleinschreibung unterscheiden, nicht wirklich erforderlich, da das Muster keine Zeichen enthält)
L
= Last (nach diesem Umschreiben wird das Umschreiben beendet, stellen Sie also sicher, dass es das Letzte in Ihrer Liste der Umschreibungen ist.)
QSA
= Query String Append, nur für den Fall, dass Sie so etwas wie ?like=penguins
am Ende haben, das Sie behalten und an index.php übergeben möchten.
index.php
umleiten oder Sie möchten jede Anfrage an diesen bestimmten Ordner umleitenindex.php
?