CodeIgniter搭建静态页面遇路由404问题:仅首页可访问求助
解决CodeIgniter后台页面404的问题
我来帮你排查下几个关键问题,这些应该就是导致后台404的核心原因:
1. 路由与控制器方法不匹配
你的路由配置里写了:
$route['admin'] = 'admin/dashboard';
但你的Admin控制器里并没有dashboard方法,只有一个带默认参数的view方法。这条路由会找不到对应的控制器方法,自然返回404。
你可以二选一修改:
- 方案一:调整路由规则,让
admin指向admin/view(触发默认参数dashboard),同时支持其他后台页面的访问:$route['admin'] = 'admin/view'; $route['admin/(:any)'] = 'admin/view/$1'; // 支持访问/admin/xxx类页面 - 方案二:给Admin控制器添加dashboard方法:
class Admin extends CI_Controller { // 新增dashboard方法,对应路由里的admin/dashboard public function dashboard() { $data['title'] = 'Dashboard'; $this->load->view('admin/dashboard', $data); } // 保留view方法用于其他后台页面 public function view($admin = 'dashboard') { if ( ! file_exists(APPPATH.'views/admin/'.$admin.'.php')) { show_404(); } $data['title'] = ucfirst($admin); // 修正变量名错误 $this->load->view('admin/'.$admin, $data); } }
2. 控制器内的变量名错误
你的Admin控制器里有个明显的低级错误:
$data['title'] = ucfirst($page);/* should be there*/
这里的$page变量根本没定义,应该替换为方法的参数$admin,否则会抛出PHP错误(可能导致页面空白或404)。修正后:
$data['title'] = ucfirst($admin);
3. 路由顺序的确认
虽然你已经把$route['admin']放在了$route['(:any)']前面,但还是要提醒下:CodeIgniter的路由是从上到下匹配的,所有具体路由(比如admin、admin/settings)必须放在(:any)这种通用路由前面,否则通用路由会先匹配,导致具体路由失效。你的现有顺序是正确的,后续新增后台路由时也要遵循这个规则。
测试验证
修改完成后,访问你的域名/admin应该就能正常加载后台仪表盘了。如果要访问其他后台页面(比如admin/settings),只要在application/views/admin/下创建settings.php,就能通过你的域名/admin/settings访问(前提是配置了$route['admin/(:any)'] = 'admin/view/$1';)。
内容的提问来源于stack exchange,提问作者Ahmad Tahhan
相关产品推荐
相关产品推荐

