Votre règle de réécriture semble presque correcte.
Assurez-vous d'abord que votre .htaccess
se trouve dans votre répertoire de documents (au même endroit que le fichier index.php
) ou cela n'affectera que le sous-dossier dans lequel il se trouve (et tous les sous-dossiers à l'intérieur de celui-ci - de manière récursive).
Ensuite, modifiez légèrement votre règle pour qu'elle ressemble à quelque chose comme ça :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
Pour l'instant, tu ne fais que correspondre .
qui est un d'un caractère quelconque, il faut au moins .*
pour correspondre à un nombre quelconque d'occurrences de n'importe quel caractère.
El $_GET['path']
contiendra la fausse structure de répertoire, donc /mvc/module/test
par exemple, que vous pouvez ensuite utiliser dans le fichier index.php pour déterminer l'adresse de l'utilisateur. Contrôleur et les actions que vous voulez effectuer.
Si vous voulez que l'ensemble du système soit installé dans un sous-répertoire, tel que /mvc/
o /framework/
La façon la moins compliquée de le faire est de modifier 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
se trouve dans ce dossier tandis que le .htaccess
se trouve dans la racine du document.
Alternative à $_GET['path']
(mis à jour en février 18 et janvier 19)
Il n'est pas nécessaire (ni même courant aujourd'hui) de définir l'attribut chemin en tant que $_GET
variable, de nombreux cadres s'appuient sur $_SERVER['REQUEST_URI']
pour récupérer la même information - normalement pour déterminer quelle Contrôleur à utiliser - mais le principe est exactement le même.
Cela simplifie la RewriteRule
légèrement, car vous n'avez pas besoin de créer le fichier chemin (ce qui signifie que le paramètre original de l'OP RewriteRule
sera fonctionnent maintenant) :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
Cependant la règle concernant l'installation dans un sous-répertoire s'applique toujours, par ex.
RewriteRule ^.*$ /mvc/index.php [L,QSA]
Les drapeaux :
NC
= No Case (non sensible à la casse, pas vraiment nécessaire puisqu'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 dans votre liste de réécritures).
QSA
= Query String Append, juste au cas où vous auriez quelque chose comme ?like=penguins
à la fin que vous voulez garder et passer à index.php.