.htaccess 智能URL的|多变量的modrewrite?

.htaccess 智能URL的|多变量的modrewrite?,.htaccess,mod-rewrite,url-rewriting,url-routing,.htaccess,Mod Rewrite,Url Rewriting,Url Routing,实现这一目标的最佳方式是什么 我计划做一些智能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 然后,我将运行一个函数,该函数将解析$url变量并返回 $urlvariable['page'] = blo

实现这一目标的最佳方式是什么

我计划做一些智能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
然后,我将运行一个函数,该函数将解析$url变量并返回

$urlvariable['page'] = blog
$urlvariable['id'] = 5
$urlvariable['title'] = a_blog_title
$urlvariable['date'] = 2011_08_05
但重写应该能够处理更小或更大的URL,如: 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
有办法吗?重写的表达式是什么


谢谢,

对我来说,最好的方法是将所有请求路由到您的php/另一种语言脚本,然后使用如下内容:

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];
}

RiaD的想法是正确的,使用explode而不是regexp,因为regexp比较慢

但是,您可能还是希望使用正则表达式来规范化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
)

谢谢,但我实际上是在寻找modrewrite表达式来使用,.htaccess文件中的代码。谢谢,但我实际上是在寻找modrewrite表达式来使用,.htaccess文件中的代码。