2009-06-13 7 views
5

Je ne suis pas sûr comment faire un mod-réécriture pour une structure modulaire MVC. Ce que je veux arriver est l'URL capture:Mod-réécriture MVC simple

http://domainname.com/index.php?model= {model}&view={view}&parameters={parameters}

REMARQUE: les paramètres sont dans un ordre précis et séparés par des tuyaux (à moins d'une meilleure façon): paramètres = param1 | param2 | param3

http://domainname.com/ {model}/{view}/{parameters}

Exemple:

http://domainname.com/faq/edit/13

Un autre exemple:

http://domainname.com/faq/index/ {sort}/{page}/{search} http://domainname.com/faq/index/asc/3/How+to

Essentiellement quoi que ce soit après la volonté du modèle et la vue et peut être des paramètres; autant que nécessaire. Pour chaque vue, je connaîtrai les paramètres possibles de cette zone et dans quel ordre.

Merci à l'avance.

-

En utilisant le code ci-dessous c'est ce que j'ai:

 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)/(.*) index.php?model=$1&view=$2&parameters=$3 [L,NS] 

URL: http://localhost:8888/testing/faq/index/asc/5/How+to
PHP variables $ _GET:

 
Array 
(
    [model] => faq/index/asc 
    [view] => 5 
    [parameters] => How to 
) 

devrait être:

 
Array 
(
    [model] => faq 
    [view] => index 
    [parameters] => asc/5/How to 
) 

S'il vous plaît aider

+1

Les (. *) Sont gourmands (c'est-à-dire qu'ils s'étendent le plus possible). Dans ce cas, vous devrez utiliser (. *?) Pour les deux premiers. Il vous donne RewriteRule^(. *?)/(. *?)/(. *) $ Index.php? Model = $ 1 & view = $ 2 & paramètres = $ 3 [L, NS] –

Répondre

11

Vous pouvez utiliser une fonction PHP pour le faire. Rapidement, sans valeur par défaut ou la gestion des erreurs:

list($controller, $function, $params) = explode('/', $uri, 3); 
$params = explode('/', $uri); 

Et dans le .htaccess, réacheminer toute requête non-existante à votre PHP fichier de traitement de requête:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ mvc.php [L,NS] 

Méfiez-vous de filtrer vos commentaires bien , de ne pas inclure tous les fichiers, etc.

3

Vous pouvez aussi avoir votre htaccess comme ceci:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)/(.*) mvc.php?model=$1&view=$2&parameters=$3 [L,NS] 

Ceci est juste une autre façon de le faire, bien que personnellement je préfère le chemin de streetpc.

+0

Hey, merci de me revenir tellement rapidement. J'ai édité ma question pour inclure mon code testé que j'ai modifié à partir de ce que vous m'avez fourni. Presque là, il suffit de peaufiner. Je vous remercie. – Torez

Questions connexes