我希望将我的帖子标题放在我的网址中,用破折号分隔,我用this answer执行此操作,这是我的代码:
public function post($post_id, $slug = ''){
$data['post'] = $this->posts_model->get_post_by_id($post_id);
if ($slug) {
$get_title = $data['post']->post_slug;
redirect('blog/' . $post_id . '/' . $get_title);
}
$this->load->view('pages/show-post', $data);
}
这些是我的路线:
$route['blog/(:num)'] = 'blog/post/$1';
$route['blog/(:num)/(:any)'] = 'blog/post/$1/$2';
问题:当我加载example.com/blog/1
时,一切正常,但当我加载example.com/blog/1/anything
时,我的代码会将我重定向到example.com/blog/1/my-slug-from-database
,但页面加载失败, firefox告诉我The page isn't redirecting properly
错误。
我该如何解决这个问题?我的代码有什么问题吗?
感谢您的帮助!
答案 0 :(得分:2)
您访问example.com/blog/1/anything
,并重定向到example.com/blog/1/my-slug-from-database
。现在在CI中,您将获得相同的功能,然后因为$slug
为真,您将再次重定向到example.com/blog/1/my-slug-from-database
。你有一个重定向循环 - 这就是导致该页面没有正确重定向错误的原因。
您需要一种方法来停止重定向 - 我可以从您的代码中看到,检查是否$slug === $get_title
,如果是,请不要重定向。但是很难知道该怎么做,因为我不确定你要做什么。
答案 1 :(得分:1)
我猜你真正想要的是防止网址显示没有slug来提高链接质量和SEO目的。为什么不在仅提供slug时将代码更改为仅重定向,IE:
更改行:
if ($slug) {
到
if (!$slug) {
然后代码不会陷入重定向循环(如Ron Dadon所建议的那样),帖子将始终显示在URL中的slug。
我不能像你在问题example.com/blog/1/anything
中那样猜测链接到帖子的任何其他原因 - 你为什么要把anything
放在网址中?这可能只是slu ,,对吧?