实现这一目标的最佳方法是什么?
我打算做一些智能modrewrite +一个从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/title-a_blog_title/date-2011_08_05/var1-foo/var2-bar/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 :(得分: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];
}
答案 1 :(得分:0)
RiaD有正确的想法,使用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
)