Codeigniter项目admin控制器404及重定向异常问题求助
CodeIgniter 博客项目 admin 控制器问题排查与解决
问题梳理
- 初始admin控制器包含
login()、register()、sendmail()方法,运行正常;添加logout()方法并在构造函数加入未登录重定向逻辑后,出现过多重定向错误,随后admin控制器所有功能失效,始终返回404 - 即使将login方法移至单独的
login.php控制器,删除logout方法及重定向代码,404问题仍未解决 - .htaccess配置后可省略index.php访问站点,但直接访问
admin/login返回404,添加index.php(如websitename/index.php/admin/login)可打开登录页;提交登录信息后跳转到XAMPP默认的localhost/dashboard页面
问题原因与解决步骤
1. 初始构造函数的无限重定向问题
原构造函数会拦截admin控制器的所有方法,包括login()——当未登录用户访问admin/login时,构造函数检查到无session,又重定向到admin/login,形成无限循环。
如果login方法仍在admin控制器内,修改构造函数,排除无需登录的方法:
public function __construct() { parent::__construct(); // 获取当前请求的方法名 $current_method = $this->router->fetch_method(); // 允许未登录访问的方法列表 $allowed_methods = ['login', 'register', 'sendmail']; // 仅对非允许方法做登录校验 if(!$this->session->userdata('id') && !in_array($current_method, $allowed_methods)){ redirect('admin/login'); } }
2. 404错误的排查与修复
- 控制器文件名/类名检查:CodeIgniter 3对控制器文件名和类名大小写敏感,必须首字母大写。比如admin控制器文件应为
Admin.php,类名对应class Admin extends CI_Controller;单独的login控制器文件应为Login.php,类名class Login extends CI_Controller - 清除缓存:删除
application/cache目录下的所有缓存文件,避免旧路由规则残留 - 路由配置检查:打开
application/config/routes.php,确认没有错误的路由规则覆盖admin相关路径
3. .htaccess与base_url配置修复
正确配置.htaccess(Apache服务器)
将.htaccess放在项目根目录,内容如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
修正base_url
打开application/config/config.php,设置正确的项目根路径:
$config['base_url'] = 'http://localhost/你的项目文件夹名/';
(比如项目放在XAMPP的htdocs/myblog目录下,就设置为http://localhost/myblog/)
这一步能解决登录后跳转到XAMPP dashboard的问题,确保表单提交路径正确指向项目内部。
4. Logout方法的正确实现
如果需要恢复logout功能,确保销毁session后重定向到登录页:
public function logout() { // 清除指定session $this->session->unset_userdata('id'); // 销毁整个session $this->session->sess_destroy(); // 重定向到登录页 redirect('admin/login'); }
内容的提问来源于stack exchange,提问作者Adeel Anjum
相关产品推荐
相关产品推荐

