【问题标题】:Error while redirecting in Codeigniter在 Codeigniter 中重定向时出错
【发布时间】:2016-06-14 12:00:41
【问题描述】:

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

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

感谢您的帮助!

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您访问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,如果是,请不要重定向。但是真的很难知道该怎么做,因为我不确定你想做什么。

    【讨论】:

      【解决方案2】:

      我猜你真正想要的是防止 url 显示没有 slug 以提高链接质量和用于 SEO 目的。为什么不将代码更改为仅在未提供 slug 时重定向,IE:

      换行:

      if ($slug) {
      

      if (!$slug) {
      

      这样代码就不会陷入重定向循环(如 Ron Dadon 所建议的那样),帖子将始终显示 URL 中的 slug。

      我猜不出任何其他链接到帖子的原因,就像您在问题 example.com/blog/1/anything 中所做的那样 - 为什么要将 anything 放在 URL 中?这只能是蛞蝓吧?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多