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

CodeIgniter应用首次加载404,刷新后正常显示问题求助

解决CodeIgniter首次加载404、刷新正常的问题

听起来这个问题有点棘手——首次访问www.example.com/xyz/出404,刷新就正常,结合你的配置,我整理了几个最可能的排查方向,你可以一步步试:

1. 检查.htaccess重写规则

这是最常见的原因,尤其是在Linux服务器上。你的项目在xyz子目录里,.htaccess需要正确适配这个路径。

打开项目根目录(xyz文件夹)的.htaccess文件,确保规则是这样的:

RewriteEngine On
RewriteBase /xyz/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

重点是RewriteBase /xyz/这一行,它告诉服务器重写的基准路径是你的项目子目录。如果之前没加这行,首次请求可能无法正确映射到CodeIgniter的入口文件,刷新后服务器缓存了路径规则才恢复正常。

2. 确认config.php中的base_url配置

打开application/config/config.php,找到$config['base_url'],确保它设置正确:

$config['base_url'] = 'http://www.example.com/xyz/';

如果这个值留空或设置错误,CodeIgniter首次加载时可能无法正确解析路由,导致404;刷新后可能因为自动检测到正确路径而恢复。

3. 调整服务器默认文件优先级

有些服务器会优先尝试加载目录默认文件(比如index.html、default.html),如果你的xyz文件夹里恰好有这类文件,首次请求时服务器会先找它们,找不到才会交给CodeIgniter的index.php,这可能引发首次404。

你可以:

  • 删除xyz文件夹下的index.html之类的默认文件
  • 或者在服务器配置(比如Apache的httpd.conf或虚拟主机配置)里,把index.php设为最高优先级的默认文件:
DirectoryIndex index.php index.html index.htm

4. 验证控制器的大小写和命名

Linux服务器区分大小写,你的路由设置的是Member控制器,那对应的文件必须是Member.php(首字母大写),控制器类名也必须是Member,继承CI_Controller:

class Member extends CI_Controller {
    public function index() {
        // 你的业务代码
    }
}

如果文件名是member.php(小写),首次请求可能因为服务器找不到正确类而返回404,刷新后CodeIgniter的自动加载缓存了类路径才正常。

5. 关闭路由缓存

如果你之前开启了路由缓存,可能导致首次加载时旧的缓存规则生效。打开application/config/config.php,确保:

$config['cache_routes'] = FALSE;

如果之前是TRUE,改成FALSE后清空application/cache目录下的缓存文件,再测试。

建议先从.htaccess和base_url这两个点开始排查,这是最容易出问题的地方。如果还是不行,再依次检查后面的方向。

内容的提问来源于stack exchange,提问作者Farhan Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:42