2009-06-13 18 views
5

Nie jestem pewien, jak zrobić mod-przepisać dla modułowej struktury MVC. Co chcę się zdarzyć to URL oddaje:Simple MVC mod-rewrite

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

UWAGA: parametry będą w określonej kolejności i oddzielone rur (chyba że istnieje lepszy sposób): parametry = param1 | param2 | param3

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

przykład:

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

Innym przykładem

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

zasadzie cokolwiek od modelu i widok woli i mogą być parametry; tyle, ile potrzeba. Dla każdego widoku poznam możliwe parametry, które są dozwolone i w jakiej kolejności.

Z góry dziękuję.

-

Korzystanie poniższy kod to, co mam:

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

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

Powinno być:

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

Proszę pomóc

+1

(. *) Są zachłanne (tj. Rozciągają się tak bardzo, jak to możliwe). W takim przypadku będziesz musiał użyć (. *?) Dla pierwszych dwóch. Daje ci RewriteRule^(. *?)/(. *?)/(. *) $ Index.php? Model = 1 $ i widok = 2 $ i parametry = 3 $ [L, NS] –

Odpowiedz

11

Możesz użyć funkcji PHP, aby to zrobić. Szybko, bez wartości domyślnej lub obsługi błędów:

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

A w .htaccess, przekierowywać żadnych nieistniejących zapytanie do obsługi zapytań PHP pliku:

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

Uważaj aby filtrować wejście choć , nie zawiera żadnego pliku itp

3

można również mieć swój htaccess tak:

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

Jest to po prostu inny sposób, ale osobiście wolę sposób streetpc.

+0

Hej, dziękuję za skontaktowanie się ze mną tak szybko. Zmienilem moje pytanie, aby zalozyl testowany kod, który zmienilem z tego, co mi dostarcziles. Prawie na miejscu, po prostu potrzebuje pewnych poprawek. Dziękuję Ci. – Torez

Powiązane problemy