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

CodeIgniter网站在线主机子页面404错误排查请求

这种情况我在部署CodeIgniter项目时碰到过好多次,大概率是服务器配置或者框架基础设置没匹配上,咱们一步步来排查解决:

排查与解决方案

1. 先确认服务器的mod_rewrite模块是否开启

很多共享主机默认没启用这个Apache模块,这会直接导致你的.htaccess规则失效。你可以通过在项目根目录新建一个info.php文件,内容写<?php phpinfo(); ?>,访问后搜索mod_rewrite看是否存在;或者直接联系主机客服确认。如果没开启,要么让主机方启用,要么先临时用带index.php的URL访问(比如http://142.93.173.123/index.php/你的控制器/方法),验证是不是这个问题。

2. 检查CodeIgniter核心配置文件

打开application/config/config.php,确认两个关键设置:

  • $config['base_url']必须填你在线主机的完整地址:$config['base_url'] = 'http://142.93.173.123/';(注意末尾的斜杠不能少)
  • $config['index_page']要设为空字符串:$config['index_page'] = '';,因为我们要通过.htaccess去掉URL里的index.php

3. 调整.htaccess适配服务器环境

你的当前.htaccess规则在某些主机环境下可能不生效,试试这些常用的变体:

Apache环境推荐写法

RewriteEngine On
# 解决部分主机的RewriteBase路径问题
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

或者更全面的版本,防止直接访问system/application文件夹:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

如果是Nginx服务器

很多云主机现在用Nginx,这时候.htaccess完全不起作用,需要在Nginx站点配置里添加这段规则:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

修改后需要重启Nginx服务,同时可以把根目录的.htaccess重命名或者删除。

4. 验证文件权限

确保项目根目录下的application文件夹,以及子文件夹cache、logs的权限设置正确,一般设置为755(部分主机可能要求777),权限不足会导致框架无法生成缓存或日志,间接影响路由解析。

5. 测试基础路由排除代码问题

先访问框架默认的Welcome控制器:http://142.93.173.123/welcome,如果这个也404,那肯定是前面的服务器或配置问题;如果能正常访问,那就要检查你自定义控制器的命名(CodeIgniter要求控制器名首字母大写)、路由规则是否正确,或者是否存在大小写不匹配的问题。


内容的提问来源于stack exchange,提问作者Muzaffer Bulut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:35:20