Comment les systèmes MVC où les URL se trouvent sous ces formes forcent-ils toutes les demandes via un seul fichier index.php?
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
EDIT: Lorsque j'essaie les règles de réécriture ci-dessous, j'obtiens cette erreur:
[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, c'est le contenu complet de /index.php. Lorsque je supprime les règles de réécriture, il génère '/' ou '/index.php' ou j'obtiens un 404 pour autre chose.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
RESOLU: j'ai ajouté un / devant index.php dans la règle de réécriture, puis cela a fonctionné:
RÉSOLU ENCORE: Il s'avère que le / n'était nécessaire que parce que j'utilisais 2.2.4. Lorsque je suis passé à la version 2.2.11, le / n'était plus nécessaire.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
la source
la source
Réponses:
Si vous utilisez Apache, utilisez les réécritures via
mod_rewrite
:Cela réécrira vos URL dans »index.php? Q = foo / bar / baz« de manière transparente.
Les lignes 2. et 3. indiquent au moteur de réécriture de ne pas réécrire l'URL s'il pointe vers un fichier ou un répertoire existant. Ceci est nécessaire pour avoir accès aux vrais fichiers fournis par le serveur httpd.
la source
Le code ci-dessous utilise le mod_rewrite d'Apache pour réécrire toutes les URL ne pointant pas vers un fichier physique ou un répertoire à mapper sur index.php. Le résultat final sera:
Réécrire la règle:
Explication:
Les deux lignes ci-dessus indiquent que cette règle ne s'applique pas aux fichiers normaux (-f) ou aux répertoires (-d).
Pour plus d'informations sur la création de règles mod_rewrite, consultez le site Web Apache: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
la source