使用 Codeigniter 重定向 SEO 友好的 url?
Posted
技术标签:
【中文标题】使用 Codeigniter 重定向 SEO 友好的 url?【英文标题】:Redirecting SEO friendly urls with Codeigniter? 【发布时间】:2013-07-30 01:46:24 【问题描述】:我正在使用 codeigniter 构建一个网站,我的网址遵循以下格式:link1 其中 id 例如123用于向数据库查询记录。
最后一个 uri 段仅用于 SEO 友好目的,可以更改为任何内容 - 例如link2
从this answer 开始,我如何重定向 url 的所有变体以在最后一段中显示正确的文本?
我应该在控制器中检查 url 的格式是否正确并将其重定向到那里吗?
例如
if($this->uri->rsegment(4, 0) !== $this->myModel->recordName)
redirect($id.'/'.$this->myModel->recordName);
谢谢
---更新1---
刚刚发现上面的方法有问题。有时我会在 url 的末尾有额外的段 - 例如link - 这不适用
---更新2---
这是我最新的代码。如果仅提供了 id,这将忽略其他段并起作用。希望有人可以确认这是否是正确/最佳的方法!
$correctRecordName = myEncodeForUrlFunction($this->myModel->recordName);
$rsegments = $this->uri->rsegment_array();
if(count($rsegments) < 4 || $rsegments[4] !== $correctRecordName)
$rsegments[4] = $correctRecordName;
$url = site_url($rsegments);
redirect($url, 'location', 301);
【问题讨论】:
如果您已经在数据库中存储了正确的 url slug (recordName),为什么不使用它来查找数据而不是 id?您可以删除 ID,使 url 更加清晰,并且您不会遇到重复内容的问题。 谢谢 Jeemusu - 问题是我的很多记录名称都有特殊字符,我正在使用 CI 的 url_title 对它们进行编码。在那之后将没有任何方法来解码它们,因为它只是删除了特殊字符。我可以使用 urlencode 但我会有讨厌的网址,例如%21%40%23%40%40%21 在这种情况下,您的方法应该可以正常工作。为什么它不适用于额外的段?如果您使用$this->uri->rsegment(n)
检索网址,它应该只返回段 n(记录名称)而不是段 n+1 n+2(urikey,urivalue)?
我不得不对其进行调整。现在它忽略了额外的部分 - 更新了我的答案
【参考方案1】:
你为什么不直接使用 $this->uri->segment(#);其中 # 是段号。这还没有让我们失望。还发现了一些建议的 rsegment(s) 可能存在错误的参考资料。
【讨论】:
以上是关于使用 Codeigniter 重定向 SEO 友好的 url?的主要内容,如果未能解决你的问题,请参考以下文章
301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL
Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案