Wie erzwingen MVC-Systeme, in denen sich die URLs in diesen Formularen befinden, alle Anforderungen über eine einzige index.php-Datei?
http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you
BEARBEITEN: Wenn ich die folgenden Umschreiberegeln versuche, wird folgende Fehlermeldung angezeigt:
[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1
EDIT: Oh, das ist der komplette Inhalt von /index.php. Wenn ich die Umschreiberegeln entferne, wird '/' oder '/index.php' ausgegeben oder ich bekomme eine 404 für irgendetwas anderes.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
Gelöst: Ich habe ein / vor index.php in die Umschreiberegel eingefügt und dann hat es funktioniert:
WIEDER GELÖST: Es stellte sich heraus, dass / nur benötigt wurde, weil ich 2.2.4 ausgeführt habe. Beim Upgrade auf 2.2.11 wurde / nicht mehr benötigt.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
quelle
quelle
Antworten:
Wenn Sie Apache verwenden, verwenden Sie Umschreibungen über
mod_rewrite
:Dadurch werden Ihre URLs transparent in »index.php? Q = foo / bar / baz« umgeschrieben.
Die Zeilen 2. und 3. weisen die Rewrite Engine an, die URL nicht neu zu schreiben, wenn sie auf eine vorhandene Datei oder ein vorhandenes Verzeichnis verweist. Dies ist erforderlich, um Zugriff auf echte Dateien zu haben, die vom httpd-Server bereitgestellt werden.
quelle
Der folgende Code verwendet Apaches mod_rewrite, um alle URLs neu zu schreiben, die nicht auf eine physische Datei oder ein Verzeichnis verweisen, das / das index.php zugeordnet werden soll. Das Endergebnis wird sein:
Umschreiberegel:
Erläuterung:
Beide obigen Zeilen schreiben vor, dass diese Regel nicht für reguläre Dateien (-f) oder Verzeichnisse (-d) gilt.
Weitere Informationen zum Erstellen von mod_rewrite-Regeln finden Sie auf der Apache-Website: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
quelle