我有一些问题与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()完成的吗?
我过去做过类似的事情; 我找不到它,但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)
并简单地忽略文章检索中的第二个参数.
至于添加标题,您可以:
url_title($title,'dash',TRUE)函数(在url helper中),它$title使用dashas作为分隔符,并使其全部小写;至于如何显示即使使用的URL没有它,你可以做,你猜到了,重定向,但由于这两条路径指向同样的方法也不会改变你什么蛞蝓.
哦,嗯,在调用重定向时要小心循环,仔细检查;)