首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >modrewrite用于智能URL的|多个变量?

modrewrite用于智能URL的|多个变量?
EN

Stack Overflow用户
提问于 2011-08-06 00:43:59
回答 2查看 193关注 0票数 0

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

我计划做一些智能的modrewrite +一个从URL抓取变量名的函数。

例如:

像这样的网址: domain.com/page-blog/id-5/title-a_blog_title/date-2011_08_05

将返回:

代码语言:javascript
复制
$urlvariable = page-blog/id-5/title-a_blog_title/date-2011_08_05

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

代码语言:javascript
复制
$urlvariable['page'] = blog
$urlvariable['id'] = 5
$urlvariable['title'] = a_blog_title
$urlvariable['date'] = 2011_08_05

但是重写应该能够处理更小或更大的urls,比如: domain.com/page-blog/id-5/

正在返回:

代码语言:javascript
复制
$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等。

代码语言:javascript
复制
$urlvariable = page-blog/id-5/title-a_blog_title/date-2011_08_05/var1-foo/var2-bar/var3-xpto/var4-xyz

有没有办法做到这一点?重写的表达式是什么?

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2011-08-06 00:50:58

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-08-06 01:51:33

RiaD的想法是正确的,使用explode而不是正则表达式(因为正则表达式更慢)。

但是,您可能希望使用正则表达式来“规范化”URL。但在此之后,您仍然可以使用explode来获得很小的速度增益,或者执行以下操作

代码语言:javascript
复制
$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);
}

这将打印:

代码语言:javascript
复制
Array(
    [page] => blog
    [id] => 5
    [blank] => 
    [title] => a_blog_title
    [date] => 2011_08_05
    [var1] => foo
    [var2] => bar
    [var3] => xpto
    [var4] => xyz
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6959741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档