2009-06-13 15 views
5

Non sono sicuro di come eseguire una riscrittura mod per una struttura MVC modulare. Quello che voglio che accada è l'URL cattura:Semplice riscrittura mod MVC

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

NOTA: i parametri sarà in un ordine specifico e separato da tubi (a meno che non ci sia un modo migliore): parametri = param1 | param2 | param3

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

Esempio:

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

altro esempio:

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

Essenzialmente nulla dopo il modello e la vista volontà e possono essere parametri; tanti quanti ne servono. Per ogni vista conoscerò i parametri possibili che l'area è ammissibile e in quale ordine.

Grazie in anticipo.

-

usando il codice seguente questo è quello che ho:

 
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 variabili $ _GET:

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

dovrebbe essere:

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

Please help

+1

I (. *) Sono golosi (cioè si estendono il più possibile). In questo caso, dovrai usare (. *?) Per i primi due. Ti dà RewriteRule^(. *?)/(. *?)/(. *) $ Index.php? Model = $ 1 & view = $ 2 & parameters = $ 3 [L, NS] –

risposta

11

È possibile utilizzare una funzione PHP per farlo. Rapidamente, senza alcun valore di default o la gestione degli errori:

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

E nel .htaccess, reindirizzare tutte le query non-esistente al PHP query la gestione dei file:

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

Attenzione per filtrare l'ingresso però , di non includere qualsiasi tipo di file, ecc

3

Si potrebbe anche avere il vostro .htaccess in questo modo:

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

Questo è solo un altro modo per farlo, anche se personalmente preferisco lo streetpc.

+0

Ehi, grazie per avermi contattato così rapidamente. Ho modificato la mia domanda per includere il mio codice testato che ho modificato da quello che mi hai fornito. Quasi lì, ha solo bisogno di qualche ritocco. Grazie. – Torez