我正在建立一个带有codeigniter的网站,我的网址遵循以下格式:http://www.mywebsite.com/123/name-of-the-record其中,例如123用于查询数据库以获取记录。
最后一个uri细分市场仅用于SEO友好目的,可以更改为任何内容 - 例如http://www.mywebsite.com/123/i-can-write-anything-here
继续此答案https://stackoverflow.com/a/1442130/864507之后,如何重定向网址的所有变体以在最后一段显示正确的文字?
我应该检查控制器中的url格式是否正确,并将其重定向到那里?
e.g。
if($this->uri->rsegment(4, 0) !== $this->myModel->recordName) {
redirect($id.'/'.$this->myModel->recordName);
}
由于
--- --- UPDATE1
刚刚发现上述方法存在问题。有时我会在网址的末尾添加额外的细分 - 例如http://www.mywebsite.com/123/name-of-the-record/urikey/urivalue - 这不适用于
--- --- UPDATE2
这是我的最新代码。如果仅提供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);
}
答案 0 :(得分:0)
为什么不直接使用$ this-&gt; uri-&gt; segment(#);其中#是段号。这还没有让我们失望。还发现了一些提示rsegment(s)可能有问题的参考文献。