2011-08-05 55 views
0

完成該操作的最佳方法是什麼?modrewrite for smart URL |多個變量?

我打算做一些聰明的modrewrite +一個功能來抓取變量名稱的URL。

例如:

的URL,如: domain.com/page-blog/id-5/title-a_blog_title/date-2011_08_05

將返回:

$urlvariable = page-blog/id-5/title-a_blog_title/date-2011_08_05 

比,我將運行一個函數來解析$ urlvariable並返回

$urlvariable['page'] = blog 
$urlvariable['id'] = 5 
$urlvariable['title'] = a_blog_title 
$urlvariable['date'] = 2011_08_05 

但重寫應該能夠處理更小或更大的網址,如: domain.com/page-blog/id-5/

返回:

$urlvariable = page-blog/id-5/ 

,或者也: domain.com/page -blog/ID-5 /冠軍a_blog_title /日期2011_08_05/VAR1-富/ VAR2酒吧/ VAR3-xpto/VAR4-XYZ等等

$urlvariable = page-blog/id-5/title-a_blog_title/date-2011_08_05/var1-foo/var2-bar/var3-xpto/var4-xyz 

任何方式做到這一點?重寫的表達是什麼?

感謝,

回答

0

對我來說,最好的辦法是將所有請求你的PHP/another_language腳本,然後使用這樣的:

for($i=1,$arr=explode('/',$_SERVER['REQUEST_URI']),$s=count($arr);$i<$s;++$i){ //avoid 0(empty part) and 1(script name) 
    $tmp=explode(' ',$arr[$i]); 
    $get[$tmp[0]]=$tmp[1]; 
} 
+0

謝謝,但我其實尋找modrewrite表達式中使用時,代碼進入.htaccess文件。 – Henrique

0

里亞德有正確的思想,採用explode而不是正則表達式(因爲正則表達式更慢)。

但是,您可能希望使用正則表達式來「規範化」URL。但在那之後,你仍然可以使用explode一個微小的速度增益,或做這樣的事情

$url = "page-blog/id-5/blank-/title-a_blog_title/date-2011_08_05/var1-foo/var2-bar/var3-xpto/var4-xyz"; 

$url = preg_replace("~//+~", '/', $url); // remove multiple consequtive slashes 

$params = array(); 
if(preg_match_all("~(\w+)-([^/]*)~", $url, $params)) { 
    $params = array_combine($params[1], $params[2]); 
    print_r($params); 
} 

,將打印:

Array(
    [page] => blog 
    [id] => 5 
    [blank] => 
    [title] => a_blog_title 
    [date] => 2011_08_05 
    [var1] => foo 
    [var2] => bar 
    [var3] => xpto 
    [var4] => xyz 
) 
+0

謝謝,但我實際上尋找modrewrite表達式使用,在.htaccess文件內的代碼。 – Henrique