我正在使用CodeIgniter构建一个网站,我的URL遵循这种格式:link1其中ID(例如 123)用于查询数据库记录。
最后的URI段仅用于SEO友好目的,并且可以更改为任何内容,例如 link2
根据此答案,如何重定向所有变体的URL以显示最后一段正确的文本?
我应该在我的控制器中检查URL是否符合正确格式并在那里重定向它吗?
例如:if($this->uri->rsegment(4, 0) !== $this->myModel->recordName) {
redirect($id.'/'.$this->myModel->recordName);
}
感谢您的选择。
---更新1---
刚刚发现了以上方法存在的问题。有时候我会在url结尾处添加额外片段,例如链接,而此方法将无法处理这种情况。
---更新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);
}
$this->uri->rsegment(n)
检索URL,则它应该只返回第n个片段(记录名称),而不是第n+1个和第n+2个片段(urikey,urivalue)? - Jeemusu