使用Codeigniter进行PHP路由(SEO中的标题)

2 php routing codeigniter

我有一些问题与Codeigniter签署路由.我现在正在做的是以下内容:

$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID
Run Code Online (Sandbox Code Playgroud)

这意味着example.com/articles/123将完美地工作并加载ID为123的文章.但我也希望有可能将aticle的标题添加到URL(用于SEO).示例:example.com/articles/123/article-title

我想要的与Stack Overflow几乎相同:stackoverflow.com/questions/123/the-title

我怎样才能做到这一点?

我也想知道Stack Overflow是如何工作的.如果我转到stackoverflow/questions/111,标题将自动添加到网址中.这是用php redirect()完成的吗?

Dam*_*rsy 5

我过去做过类似的事情; 我找不到它,但IIRC(它是几个月前)你可以使用像你一样的路线,并添加一个更具体的路线,如

$route['articles/(:num)/(:any)'] = 'articles/view/$1/$2';
$route['articles/(:num)'] = 'articles/view/$1';
Run Code Online (Sandbox Code Playgroud)

如您所见,两者都映射到相同的方法,这种方法有点"过载"; 您可以使用默认值来弥补缺少的参数:

function articles($id,$slug = FALSE) 
{ }
Run Code Online (Sandbox Code Playgroud)

并简单地忽略文章检索中的第二个参数.

至于添加标题,您可以:

  1. 在数据库中有一个"slug"字段,在保存文章时创建.你可以使用舒适的url_title($title,'dash',TRUE)函数(在url helper中),它$title使用dashas作为分隔符,并使其全部小写;
  2. 使用上面的函数并转换文章的标题(在你从数据库中检索它之后)"在运行中"; 如果第二个参数不是false,你只需检查article()方法,你就知道是否需要创建slug;

至于如何显示即使使用的URL没有它,你可以做,你猜到了,重定向,但由于这两条路径指向同样的方法也不会改变你什么蛞蝓.

哦,嗯,​​在调用重定向时要小心循环,仔细检查;)