Votre règle de réécriture semble presque correcte.
Assurez-vous d'abord que votre .htaccess
fichier est à la racine de votre document (au même endroit que index.php
), sinon il n'affectera que le sous-dossier dans lequel il se trouve (et tous les sous-dossiers qu'il contient - de manière récursive).
Ensuite, modifiez légèrement votre règle pour qu'elle ressemble à quelque chose comme:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
En ce moment , vous qu'aligner sur ce .
qui est un exemple de caractère, vous avez besoin au moins .*
pour correspondre à un certain nombre de cas de tout caractère.
La $_GET['path']
variable contiendra la fausse structure de répertoire, /mvc/module/test
par exemple, que vous pourrez ensuite utiliser dans index.php pour déterminer le contrôleur et les actions que vous souhaitez effectuer.
Si vous voulez que tout le shebang soit installé dans un sous-répertoire, tel que /mvc/
ou /framework/
la manière la moins compliquée de le faire, c'est de changer légèrement la règle de réécriture pour en tenir compte.
RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]
Et assurez-vous que votre index.php
êtes dans ce dossier tandis que le .htaccess
fichier est à la racine du document.
Alternative à$_GET['path']
(mise à jour de février 18 et janvier 19)
Il n'est pas réellement nécessaire (ni même courant maintenant) de définir le chemin en tant que $_GET
variable, de nombreux frameworks s'appuieront sur$_SERVER['REQUEST_URI']
pour récupérer les mêmes informations - normalement pour déterminer quel contrôleur utiliser - mais le principe est exactement le même.
Cela simplifie RewriteRule
légèrement le problème car vous n'avez pas besoin de créer le paramètre de chemin (ce qui signifie que l'original de l'OP RewriteRule
sera maintenant travailler):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
Cependant , la règle d'installation dans un sous-répertoire s'applique toujours, par exemple
RewriteRule ^.*$ /mvc/index.php [L,QSA]
Les drapeaux:
NC
= Pas de casse (pas sensible à la casse, pas vraiment nécessaire car il n'y a pas de caractères dans le motif)
L
= Last (la réécriture s'arrêtera après cette réécriture, alors assurez-vous que c'est la dernière chose de votre liste de réécritures)
QSA
= Chaîne de requête Ajouter, juste au cas où vous auriez quelque chose comme ?like=penguins
à la fin que vous voulez conserver et passer à index.php.
index.php
ou vous voulez rediriger chaque demande faite vers ce dossier spécifiqueindex.php
?