CodeIgniter重定向时控制器名称在URL中重复出现的问题排查
解决CodeIgniter 3登录后控制器名称重复的问题
嘿,我之前帮不少CodeIgniter新手排查过这类问题,你遇到的控制器名称重复的情况,大概率是重定向路径写法不对或者登录表单的提交地址配置有误,咱们一步步来捋清楚:
第一个常见原因:重定向时用了错误的路径格式
我猜你的admin_login方法里,重定向的代码大概是这样的?比如:
// 错误示例:如果当前请求已经在Admin控制器下,这种写法会叠加控制器名 redirect('admin/profile'); // 或者更坑的相对路径写法 redirect('profile'); // 此时当前地址是admin/admin_login,相对路径会变成admin/admin/profile
正确的做法是用CodeIgniter的site_url()辅助函数生成完整的URL,确保路径不会出错:
// 推荐写法:用site_url生成绝对路径,避免路径叠加 redirect(site_url('admin/profile'));
另外别忘了检查application/config/config.php里的base_url配置,必须以斜杠结尾,比如:
$config['base_url'] = 'http://你的域名.com/';
如果base_url没设置对,URL辅助函数生成的路径也会出问题。
第二个常见原因:登录表单的提交地址写错了
打开你的admin_login.php视图文件,看看form的action是不是用了相对路径?比如:
<!-- 错误写法:相对路径会让表单提交到admin/admin_login(叠加控制器) --> <form action="admin_login" method="post">
正确的写法应该是用site_url()生成完整的提交地址:
<!-- 正确写法:生成绝对路径,确保提交到正确的控制器方法 --> <form action="<?php echo site_url('admin/admin_login'); ?>" method="post">
第三个可能的原因:路由配置有冗余
去application/config/routes.php里看看有没有关于admin的冗余路由,比如:
// 这种冗余路由可能导致CodeIgniter重复解析控制器名 $route['admin/(:any)'] = 'admin/$1';
如果有这类和默认路由重复的规则,删掉它,保持路由配置简洁就好。
要是以上方法都没解决问题,可以把admin_login方法里完整的重定向代码,还有登录表单的action代码贴出来,我再帮你精准定位~
内容的提问来源于stack exchange,提问作者Shreejit Pal
相关产品推荐
相关产品推荐

