2011-08-15 70 views
0

我想为我的新CMS创建一个url路由脚本,但必须承认,正则表达式不是我强烈的一面。到目前为止,我仍然遇到错误或没有结果。Url路由正则表达式帮助

我想要做到的是使用特定的标签,如:id:year:slug等等

任何人可以帮助我或引导我与这个方向是正确的,那就是如何使用的preg_match或类似函数来找到正确的“url模式”?谷歌尚未这样做的工作一次:S

ADDED

示例URL http://www.mysite.com/post/2011/08/15/title-of-a-blogg-post/

,如果我有一个路由数据库和一个模式是例如post/:year/:month/:day/:slug我希望它匹配这个模式,调用某个控制器,并在此示例中调用某个文章。

正则表达式阵列我创建看起来像

$patterns = array(
    ":id"    => "/^[0-9]*$/", 
    ":year"    => "/^([0-9]{4})*$/", 
    ":year_short"  => "/^([0-9]{2})*$/", 
    ":month"   => "/^([0-9]{2})*$/", 
    ":day"    => "/^([0-9]{2})*$/", 
    ":slug"    => "/^[a-zA-Z0-9 -]*$" 
); 

我想我需要更换:id到​​事后运行的preg_match找到,如果URL模式在我的路由表中存在。不过,我不知道我是使用正确的正则表达式模式还是完全丢失。

.htaccess文件(因为我需要使用$ _GET以及)

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

我用这个基本上是获取网址,并留下了$ _GET变量。

$route_orginal = trim($_SERVER["REQUEST_URI"]); 
if(strpos($route_orginal, "?")!=FALSE) { 
     list($route_orginal, $get_orginal) = explode("?", trim($_SERVER["REQUEST_URI"])); 
} 

if(substr($route_orginal,(strlen($route_orginal)-1),strlen($route_orginal)) == "/") { 
     $this->routes = substr($route_orginal,1,(strlen($route_orginal)-2)); 
} else { 
    $this->routes = substr($route_orginal,1,strlen($route_orginal)); 
} 
+0

该手册解释了正则表达式模式http://www.php.net/manual/en/reference.pcre.pattern.syntax.php和http://regular-expressions.info/是一个有用的介绍。像http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world这样的工具可以帮助制作它们。 – mario

+0

您能否为您的问题添加更多细节?什么是输入,代码和解释什么不起作用以及您最终期望得到什么结果。 – stema

+0

希望我添加的代码解释了它更好一点我想要完成的事情 – dansige

回答

1

我不知道你在努力完成什么。

但是,如果你想要一个像www.mysite.com/tags/id-year-slug

,每一个标签是由连字符分隔的一个网址,你可以这样做:

首先,在你的根目录下需要一个.htaccess文件来创建漂亮的URL。

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/tags/([A-Za-z-]+)$ index.php?tags=$1 [L,QSA] 

然后在你的索引,则爆炸由标签 - 分隔符:

$tags = explode('-',$_GET['tags']); 

现在你有标记,您可以使用您的SQL和URL的阵列是相当 - 高五!

+0

+1高五! – daGrevis

+0

thx为您的答案,但它不是我正在寻找的。我已经更新了我的问题,所以我希望它能够更多地了解我所寻找的东西。 – dansige

+0

找到了解决这个问题的方法:) – dansige