使用来自基本控制器的单个重定向在 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');
如果用户未登录。
我也有这个设置从 urls 中删除 index.php
:
.htaccess:
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond !^(index\.php|resources|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [L]
接下来的配置设置:
$config['base_url'] = 'http://something.herokuapp.com/';
$config['index_page'] = '';
当我尝试访问具有下一个地址的管理部分时:
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/login
http://tcms.herokuapp.com/admin/dashobard
问题是在基本控制器中进行重定向是不好的做法,因为它会导致重定向循环:
参见:Codeigniter Redirect Loop for user session is logged in
我确定您的 admin
(如果 admin 是您的文件夹名称,则可能是 authenticate
)控制器也会扩展 TCMS_Controller
。因此,当它重定向您的 admin
控制器时,它会一次又一次地执行 TCMS_Controller
的构造函数,并重定向到导致无限循环的管理控制器。
要解决这个问题,您需要制作一个 Login
控制器,如果用户未登录,它不会扩展 TCMS_Controller
只是扩展 CI_Controller.And 重定向到该控制器。
我有这个基本控制器:
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');
如果用户未登录。
我也有这个设置从 urls 中删除 index.php
:
.htaccess:
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond !^(index\.php|resources|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [L]
接下来的配置设置:
$config['base_url'] = 'http://something.herokuapp.com/';
$config['index_page'] = '';
当我尝试访问具有下一个地址的管理部分时:
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/login http://tcms.herokuapp.com/admin/dashobard
问题是在基本控制器中进行重定向是不好的做法,因为它会导致重定向循环:
参见:Codeigniter Redirect Loop for user session is logged in
我确定您的 admin
(如果 admin 是您的文件夹名称,则可能是 authenticate
)控制器也会扩展 TCMS_Controller
。因此,当它重定向您的 admin
控制器时,它会一次又一次地执行 TCMS_Controller
的构造函数,并重定向到导致无限循环的管理控制器。
要解决这个问题,您需要制作一个 Login
控制器,如果用户未登录,它不会扩展 TCMS_Controller
只是扩展 CI_Controller.And 重定向到该控制器。