Codeigniter中的重定向循环,从基本控制器进行一次重定向


Redirect loop in Codeigniter with single redirect from base controller

我有这个基础控制器:

class TCMS_Controller extends  CI_Controller{
    public function __construct(){
        parent::__construct();
        if( ! $this->session->userdata('logged_in')){
            redirect('admin/authenticate/login');
        }
        //Loop to get all settings in the "globals" table
        foreach($this->Settings_model->get_global_settings() as $result){
            $this->global_data[$result->key] = $result->value;
        }
    }
}

这里有一个基本的重定向:

redirect('admin/authenticate/login');如果用户未登录。

我也有这个设置从url中删除index.php:

. htaccess:

Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index'.php|resources|images|css|js|robots'.txt|favicon'.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

和下一个配置设置:

$config['base_url'] = 'http://something.herokuapp.com/';
$config['index_page'] = '';

当我试图访问admin部分有下一个地址:

http://something.herokuapp.com/admin/controller/method

如果我没有登录,我应该被重定向到login页:

http://something.herokuapp.com/admin/authenticate/login

但是我得到一个重定向循环

ERR_TOO_MANY_REDIRECTS

我该如何修复它?

页面:http://tcms.herokuapp.com/

管理部分:http://tcms.herokuapp.com/admin/authenticate/loginhttp://tcms.herokuapp.com/admin/dashobard

我确信您的admin(如果admin是您的文件夹名称,可能是authenticate)控制器也扩展了TCMS_Controller。所以当它重定向你的admin控制器时,它会执行TCMS_Controller的construct函数,一次又一次地重定向到admin控制器,从而导致无限循环。

为了解决这个问题,你需要做一个Login控制器,它不扩展TCMS_Controller,只是扩展CI_Controller。如果用户未登录,则重定向到此控制器。

问题是在基本控制器中进行重定向是不好的做法,因为它会导致重定向循环:

参见:Codeigniter重定向循环用户会话登录