【问题标题】:Codeigniter rewriting URLsCodeigniter 重写 URL
【发布时间】:2012-08-17 16:40:37
【问题描述】:

当一个 url 模式匹配时,应该如何编写一个钩子来添加一个段附加 URL?

例如:

/site/product/id

路线:

/site/product/id/title-from-query

【问题讨论】:

  • 所以你需要 /site/product/id 重定向到 /site/product/id/title-from-query ?
  • 就是这样,我可能应该问的是,我应该将查询放在 CI 的 routes.php 中吗?
  • 查询,你是指SQL查询,还是别的什么?

标签: codeigniter url-rewriting


【解决方案1】:

正如您在评论中所建议的那样,Codeigniter 的路线非常适合这一点。它们允许您准确控制用户/浏览器可以在 URL 中看到的内容,同时将其推送到对框架有意义的内容。

在您的 routes.php 中,您需要类似以下内容:

$route['site/product/(:num)/(:any)'] = 'controller/method/$1';
$route['site/product/(:num)] = 'controller/method/$1';

在第一行中,第二个参数(:any) 只是为了允许路由接受title-from-query,第二行是可选的,用于处理没有指定title-from-query 的情况。 'controller/method' 应替换为您的控制器的名称和正在使用的方法。

更新:

要创建这些 URL(如果数据库中还没有 slug),可以使用 url_title() 方法:

echo anchor('site/product/id'.url_title($title));

以上内容将创建一个最后带有“slug”的链接。要强制重定向,您需要检查控制器中是否设置了正确的段,如果没有则重定向。 StackOverflow 的实现很可能是出于 SEO 的目的,如果您删除 slug,您会被带到一个带有 slug 的地址,并且它必须使用 ID 来确定它是什么。如果没有提供 slug,您将需要相同的逻辑来重定向:

redirect('/site/product/id/'.$slug, 'location', 301);

【讨论】:

  • 抱歉,我的意思是网站/产品/id 会在结果 url 后附加一个 title-from-query。我这样做的原因是用户总是看到一个带有 /site/product/id/title-from-query 形式的 url 的产品。如果您尝试使用 stackoverflow.com/questions/id,您会注意到它会将标题附加到末尾,所以我认为这是一个很好的做法。
  • 更新了我的答案,详细说明了您需要做什么以及如何处理它。
  • 亲爱的 cchana,你做得很好。谢谢它对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2013-12-15
相关资源
最近更新 更多