【问题标题】:modrewrite for smart URL's | multiple variables?智能 URL 的 mod_rewrite |多个变量?
【发布时间】:2011-10-21 01:04:47
【问题描述】:

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

我打算做一些智能 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

然后,我将运行一个函数来解析 $url 变量并返回

$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

有什么办法吗?重写的表达式是什么?

谢谢,

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting url-routing


    【解决方案1】:

    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
    )
    

    【讨论】:

    • 谢谢,但我实际上正在寻找要使用的 modrewrite 表达式,即 .htaccess 文件中的代码。
    【解决方案2】:

    就我而言,最好的方法是将所有请求路由到您的 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];
    }
    

    【讨论】:

    • 谢谢,但我实际上正在寻找要使用的 modrewrite 表达式,即 .htaccess 文件中的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2016-01-22
    相关资源
    最近更新 更多