CodeIgniter路由无响应求助:请求URL返回404且显示目录列表
这种情况我在维护老CodeIgniter项目时碰到过好多次,结合你说的同服务器上另一个未修改的CI项目能正常运行的前提,问题大概率出在这个项目本身的配置、重写规则或者权限上,按优先级给你列几个排查方向:
1. 先检查URL重写规则(.htaccess 或 Nginx配置)
看到浏览器显示目录列表,第一反应就是服务器没有把请求转发到CI的index.php入口文件。
- 先看项目根目录有没有
.htaccess文件,标准的CI重写规则应该是这样的:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
如果文件不存在,直接新建一个;如果存在,对比一下内容是否正确,有没有被误修改。
- 如果你用的是Nginx服务器,检查对应站点的配置文件,确保有类似这样的路由转发规则:
location / { try_files $uri $uri/ /index.php?$query_string; }
虽然同服务器其他项目正常,但也不排除这个项目的虚拟主机配置被单独改了。
2. 核对CodeIgniter核心配置
打开application/config/config.php,重点检查这几个关键项:
$config['base_url']:必须和你访问的URL完全匹配,比如http://yourdomain.com/,结尾的斜杠不能省略。如果留空的话,有些服务器环境会导致路由解析失败。$config['index_page']:应该设置为空字符串'',这样才能通过重写规则隐藏index.php。如果这里填了index.php,虽然能访问,但重写规则失效时就会出问题。$config['uri_protocol']:这个是重灾区!不同服务器环境对这个配置的要求不一样,默认的AUTO有时候会失效。你可以试试改成REQUEST_URI或者PATH_INFO,直接抄同服务器正常CI项目的这个配置值也行,大概率能解决问题。
3. 检查目录权限和文件完整性
- CI需要
application/cache和application/logs目录有写入权限,一般设置为755或者777(根据服务器用户组调整)。如果权限不足,CI无法初始化缓存或日志,可能导致路由逻辑直接崩溃。 - 对比同服务器正常的CI项目,检查这个项目的
system目录文件是否完整,有没有被误删或者修改过核心文件。老项目很容易出现有人乱改核心代码的情况。
4. 确认默认控制器和路由配置
- 打开
application/config/routes.php,检查$route['default_controller']是否设置正确,比如默认的'welcome'要对应application/controllers/Welcome.php文件,而且类名必须和文件名一致(CI对大小写敏感,比如文件名是Welcome.php,类名就得是Welcome)。如果默认控制器的文件名或类名写错,访问主URL就不会调用到控制器。 - 检查自定义路由有没有语法错误,比如正则表达式写错、路由规则冲突,导致所有请求都匹配不到正确的控制器。
5. 检查服务器的目录索引设置
如果浏览器显示目录列表,说明服务器的默认索引页没把index.php排在前面。虽然同服务器其他项目正常,但也有可能这个项目的虚拟主机配置被单独修改,覆盖了全局的DirectoryIndex(Apache)或index(Nginx)设置,确保配置里包含index.php。
内容的提问来源于stack exchange,提问作者afsdi
相关产品推荐
相关产品推荐

