我在使用Codeigniter时遇到了一些问题。我现在正在做的是:
$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID
这意味着example.com/articles/123将完美运行并加载ID为123的文章。但我也希望能够将URL的标题添加到URL(用于SEO)。示例:example.com/articles/123/article-title
我想要的东西与Stack Overflow几乎相同:stackoverflow.com/questions/123/the-title
我该怎么做?
我也想知道Stack Overflow是如何工作的。如果我转到stackoverflow / questions / 111,标题将自动添加到网址中。这是用php redirect()完成的吗?
答案 0 :(得分:5)
我过去做过类似的事情;我找不到它,但IIRC(它是几个月前)你可以使用像你一样的路线,并添加一个更具体的路线,如
$route['articles/(:num)/(:any)'] = 'articles/view/$1/$2';
$route['articles/(:num)'] = 'articles/view/$1';
正如您所看到的,两者都映射到相同的方法,这种方法有点“过载”;您可以使用默认值来弥补缺少的参数:
function articles($id,$slug = FALSE)
{ }
并简单地忽略文章检索中的第二个参数。
至于添加标题,你可以:
url_title($title,'dash',TRUE)
函数(在url帮助器中),它使用$title
,使用dash
作为分隔符,并使其全部小写; 至于如何在没有它的情况下使用url时如何显示slug你可以按照你猜测的那样进行重定向,但由于两条路径都指向相同的方法,所以不会为你改变任何东西。
哦,嗯,在调用重定向时要小心循环,仔细检查;)
答案 1 :(得分:0)
我建议你在你的表中创建一个slug字段,并用你想用作id的url来完成它。 让我解释一下。
你有这张表
id
title
slug
当您将文章保存到数据库中时,您可以动态创建一个slug,例如:
id: 1
title: My first post
slug: 1-my-first-post
然后您可以使用该页面的slug(在本例中为1-my-first-post)广告ID,您可以调用它:
www.example.com/articles/1-my-first-post
显然你需要在db slect中处理它
答案 2 :(得分:0)
正如我们在评论中所讨论的那样。
您可以多次创建一个路径,每个路径都有不同的参数,例如:
$route['articles/(:num)/(:any)']
$route['articles/(:num)']
我会创建一个带有重定向的函数,添加或不添加标题。
希望它有所帮助。