使用 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-&gt;uri-&gt;rsegment(n) 检索网址,它应该只返回段 n(记录名称)而不是段 n+1 n+2(urikey,urivalue)? 我不得不对其进行调整。现在它忽略了额外的部分 - 更新了我的答案 【参考方案1】:

你为什么不直接使用 $this->uri->segment(#);其中 # 是段号。这还没有让我们失望。还发现了一些建议的 rsegment(s) 可能存在错误的参考资料。

【讨论】:

以上是关于使用 Codeigniter 重定向 SEO 友好的 url?的主要内容,如果未能解决你的问题,请参考以下文章

301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL

SEO友好301重定向

多个文件的seo友好重定向

重定向 seo 友好的 URL (htaccess)

htaccess 重写和重定向 SEO 友好的 URL

Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案