2011-08-05 100 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