CodeIgniter仅默认控制器可加载,其他控制器返回404求助
解决CodeIgniter非默认控制器404错误的建议
1. 确认mod_rewrite模块已启用
Apache默认可能未开启mod_rewrite,根据系统执行对应命令:
- Linux Mint(Debian/Ubuntu系):
sudo a2enmod rewrite sudo systemctl restart apache2 - Fedora(RHEL/CentOS系):
sudo sed -i 's/#LoadModule rewrite_module modules\/mod_rewrite.so/LoadModule rewrite_module modules\/mod_rewrite.so/' /etc/httpd/conf/httpd.conf sudo systemctl restart httpd
重启后可通过phpinfo()查看mod_rewrite是否在Loaded Modules列表中。
2. 修正.htaccess配置
当前规则可能因环境或路径问题失效,尝试以下两种调整:
方案A(适配多数PHP-FPM环境)
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [QSA,L] </IfModule>
方案B(针对项目子目录场景)
若CodeIgniter项目在/var/www/ci-project子目录中,需修改RewriteBase:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /ci-project/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
3. 验证控制器命名规范
CodeIgniter对控制器文件/类名有严格要求:
- 文件名必须首字母大写(如
User.php而非user.php) - 类名需与文件名完全一致且首字母大写:
class User extends BaseController { public function index() { echo "User Controller"; } } - 确保控制器文件位于
app/Controllers/目录下,无拼写错误。
4. 检查Apache虚拟主机配置
如果使用虚拟主机,需确保AllowOverride All覆盖到项目实际目录,而非仅/var/www/:
<VirtualHost *:8080> ServerName localhost DocumentRoot /var/www/ci-project/public <Directory /var/www/ci-project/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
注意:CodeIgniter 4的入口文件在public/目录,需将DocumentRoot指向该目录。
5. 调整CodeIgniter核心配置
在app/Config/App.php中设置:
public $uriProtocol = 'REQUEST_URI'; public $indexPage = '';
同时确认$baseURL与实际访问地址完全匹配(含端口):
public $baseURL = 'http://localhost:8080/';
6. 排查路由冲突
检查app/Config/Routes.php是否存在覆盖性路由,例如:
$routes->get('(:any)', 'Home::index');
这类规则会将所有请求导向默认控制器,需调整或删除。
7. 修复文件权限
确保Apache进程拥有项目目录的读写权限:
- Linux Mint:
sudo chown -R www-data:www-data /var/www/ci-project sudo chmod -R 755 /var/www/ci-project - Fedora:
sudo chown -R apache:apache /var/www/ci-project sudo chmod -R 755 /var/www/ci-project
内容的提问来源于stack exchange,提问作者kakaroto codes
相关产品推荐
相关产品推荐

