You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:48:19