【问题标题】:PHP routing with Codeigniter (Titles in URL for SEO)使用 Codeigniter 进行 PHP 路由(SEO 的 URL 中的标题)
【发布时间】:2012-06-15 14:53:01
【问题描述】:

我有一些关于使用 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,标题将自动添加到 url。是用 php redirect() 完成的吗?

【问题讨论】:

  • 你试过了吗:$route['articles/(:num)/(:any)']?并且在传递第三个参数时,您必须用- 替换空格,并且认为不需要Christian Giupponi 提出的内容
  • @Daniel 是的,但我希望标题是可选的,就像在 Stack Overflow 上一样。
  • 但我认为这会起作用,你测试过吗?我认为由于第三个参数是(:any)
  • @Daniel 是的,(:any) 是正确的,但我在不添加标题时得到“找不到页面”。
  • 我做到了,我知道你想做什么。您是否尝试过创建具有不同参数的相同路由器?一个有(:any),另一个没有?

标签: php codeigniter routing


【解决方案1】:

我过去做过类似的事情;我找不到它知道,但 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() 方法,您就会知道是否需要创建 slug;

至于如何在不使用 url 的情况下显示 slug,正如您猜想的那样,您可以进行重定向,但由于两条路由都指向相同的方法,因此不会为您带来任何改变。

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

【讨论】:

  • 谢谢!知道如果缺少标题,Stack Overflow 如何自动添加标题? PHP 重定向()也许?
【解决方案2】:

我建议您在表中创建一个 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

显然你需要在你的数据库选择中处理它

【讨论】:

  • 感谢您的建议!然而,它并没有回答我的任何问题。
【解决方案3】:

正如我们在 cmets 上讨论的那样。

您可以多次创建路线,每次使用不同的参数,例如:

$route['articles/(:num)/(:any)']
$route['articles/(:num)']

我会创建一个带有重定向的函数,添加或不添加标题。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2011-12-24
    • 2011-11-21
    • 1970-01-01
    • 2016-11-12
    • 2020-03-09
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多