CodeIgniter应用除默认控制器外均报404错误的解决方法咨询
问题排查与解决方案
我来帮你一步步解决这个CodeIgniter的404问题,从你给出的配置来看,核心问题和几个细节点都需要调整:
1. 修复致命的.htaccess配置
你当前的.htaccess是用来拒绝所有请求访问的,这直接导致除默认控制器外的其他路由无法被正常解析。替换成CodeIgniter标准的URL重写配置:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /CodeIgniter/core/ # 仅当请求的不是真实文件/目录时,转发到index.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule> # 如需禁止直接访问目录,可保留这部分但放在重写规则之后 <IfModule authz_core_module> Require all denied </IfModule> <IfModule !authz_core_module> Deny from all </IfModule>
注意:
RewriteBase必须和你的base_url路径完全一致(即/CodeIgniter/core/),确保和服务器上的物理目录对应。
2. 确认控制器文件命名规范
CodeIgniter对控制器的文件名有严格要求:
- 你已经正确设置了类名首字母大写:
class Utilizador extends CI_Controller - 对应的文件名必须也是首字母大写:
Utilizador.php(不能是小写的utilizador.php)
如果文件名不符合规范,CI会找不到控制器,直接返回404。
3. 验证访问路径与base_url配置
你的base_url配置是:
$config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/CodeIgniter/core/';
先手动在浏览器访问http://你的域名/CodeIgniter/core/index.php/utilizador,如果能正常输出pppp,说明控制器本身没问题,只是路由重写的问题。
如果暂时不想修改.htaccess,也可以在表单中直接带index.php访问:
<form action="<?= base_url('index.php/utilizador') ?>" method="post">
4. 检查Apache服务器的必要配置
确保你的Apache满足以下条件:
- 启用了
mod_rewrite模块:打开httpd.conf,确认LoadModule rewrite_module modules/mod_rewrite.so没有被注释 - 网站目录配置中允许.htaccess生效:在httpd.conf或虚拟主机配置里添加:
<Directory "/服务器上的CodeIgniter/core路径"> AllowOverride All Require all granted </Directory>
5. 路由配置的优化(可选)
你添加的$route['utilizador'] = 'utilizador';其实是多余的——CI默认会自动把URL中的utilizador映射到同名(首字母大写)的控制器。如果没有特殊路由需求,可以删掉这条规则,保持路由文件简洁。
按照以上步骤逐一调整,应该就能解决所有路由404的问题了。
内容的提问来源于stack exchange,提问作者Marco Silva
相关产品推荐
相关产品推荐

