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

标签 php codeigniter routes

我有一些关于使用 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) 
{ }

并忽略文章检索中的第二个参数。

至于添加标题,您可以:

  1. 您的数据库中有一个“slug”字段,该字段是在保存文章时创建的。您可以使用舒适的 url_title($title,'dash',TRUE) 函数(在 url 帮助器中),该函数采用 $title,使用 dash 作为分隔符,并全部小写;
  2. 使用上述函数并“即时”转换文章标题(从数据库检索后);只需检查 Article() 方法,如果第二个参数不为 false,您就会知道是否需要创建 slug;

至于如何显示 slug,即使使用没有它的 url,您也可以进行重定向,正如您猜测的那样,但由于两个路由都指向相同的方法,因此不会为您更改任何内容。

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

关于使用 Codeigniter 进行 PHP 路由(URL 中的标题用于 SEO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001485/

相关文章:

javascript - 当选择值为 'others' 时,输入字段应隐藏

php - 代码点火器 3 : Insert array form to database

java - 使用 Mockito 模拟发布请求会在 "when(event.request().getParam("类型上抛出 NullPointerException")).thenReturn ("application/octet-stream");"

ubuntu - 如何向网络管理器管理的 Ubuntu 添加持久静态路由?

php - Azure cdn IP地址限制可能吗?

php - SQL 查询中的显示不起作用

php - 核心 php mysql 功能可以在 Yii 框架中使用吗?

php - 在 Codeigniter 的表单验证中仅接受英文字符

php - session 在 CI 中的其他 Controller 中不起作用

c# - 继承 Controller 时无法让 Route 在 ASP.Net Web API 2 中工作