我有一些关于使用 Codeigniter 进行路由的问题。我现在正在做的事情如下:
$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID
这意味着 example.com/articles/123 将完美工作并加载 ID 为 123 的文章。但我也希望能够将文章标题添加到 URL(用于 SEO)。示例:example.com/articles/123/article-title
我想要的与 Stack Overflow 几乎相同:stackoverflow.com/questions/123/the-title
我怎样才能做到这一点?
我还想知道 Stack Overflow 是如何工作的。如果我访问 stackoverflow/questions/111,标题将自动添加到网址中。这是用 php redirect() 完成的吗?
最佳答案
我过去也做过类似的事情;我找不到它,但 IIRC(几个月前)您可以像您一样使用路线,还可以添加更具体的路线,例如
$route['articles/(:num)/(:any)'] = 'articles/view/$1/$2';
$route['articles/(:num)'] = 'articles/view/$1';
正如你所看到的,两者都映射到相同的方法,这有点“重载”;您可以使用默认值来弥补缺少的参数:
function articles($id,$slug = FALSE)
{ }
并忽略文章检索中的第二个参数。
至于添加标题,您可以:
- 您的数据库中有一个“slug”字段,该字段是在保存文章时创建的。您可以使用舒适的
url_title($title,'dash',TRUE)
函数(在 url 帮助器中),该函数采用$title
,使用dash
作为分隔符,并全部小写; - 使用上述函数并“即时”转换文章标题(从数据库检索后);只需检查 Article() 方法,如果第二个参数不为 false,您就会知道是否需要创建 slug;
至于如何显示 slug,即使使用没有它的 url,您也可以进行重定向,正如您猜测的那样,但由于两个路由都指向相同的方法,因此不会为您更改任何内容。
哦,嗯,调用重定向时要小心循环,仔细检查;)
关于使用 Codeigniter 进行 PHP 路由(URL 中的标题用于 SEO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001485/