在Codeigniter中重定向时出错

时间:2016-06-14 12:00:41

标签: php codeigniter

我希望将我的帖子标题放在我的网址中,用破折号分隔,我用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错误。

我该如何解决这个问题?我的代码有什么问题吗?

感谢您的帮助!

2 个答案:

答案 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 ,,对吧?