上传服务器后访问不了的根本原因是环境差异暴露的配置问题,核心卡在Web服务器路由转发(Apache需mod_rewrite和正确.htaccess,Nginx需try_files)、PHP扩展缺失(mysqli/pdo_mysql未启用)、数据库hostname用localhost导致Unix socket失败(应改127.0.0.1),以及Linux下控制器文件名与URL大小写不匹配。

上传服务器后访问不了,不是代码写错了,而是本地和服务器环境差异暴露了隐藏配置问题。核心通常卡在三处:Web 服务器路由转发、PHP 扩展支持、数据库连接路径。
检查 Nginx/Apache 是否把请求正确交给 index.php
CodeIgniter 依赖 index.php 入口统一处理所有请求。如果服务器没配置好重写规则,直接访问 /welcome 就会 404 —— 因为它根本没走到框架里。
-
Apache 用户:确认项目根目录有生效的
.htaccess,内容必须包含:RewriteEngine On<br>RewriteCond %{REQUEST_FILENAME} !-f<br>RewriteCond %{REQUEST_FILENAME} !-d<br>RewriteRule ^(.*)$ index.php/$1 [L]并确保 Apache 启用了mod_rewrite模块。 -
Nginx 用户:不能用 .htaccess,必须改 server 块配置,关键行是:
location / {<br> try_files $uri $uri/ /index.php?$query_string;<br>}注意root指向的是项目根目录(含 index.php 的那一层),不是 public 子目录。 - 快速验证:手动访问
http://yourdomain.com/index.php/welcome。能打开说明框架正常,问题出在重写;打不开则先查 PHP 或文件权限。
确认 PHP 环境是否完整启用所需扩展
本地开发环境(如 XAMPP)常默认开启所有扩展,但服务器可能只开了基础模块。CodeIgniter 连不上数据库或报白屏,90% 是 mysqli/pdo_mysql 没启用。
- 新建一个
phpinfo.php放在网站根目录,内容为<?php phpinfo(); ?>,通过浏览器访问,搜索 “mysqli” 和 “pdo_mysql”,确认状态为 enabled。 - Linux 下执行
php -m | grep -i mysql;Windows 下检查 php.ini 中是否有extension=mysqli(注意不是extension=php_mysqli.dll,新版已去前缀)。 - 特别注意:
localhost在 Linux 上可能走 Unix socket 导致连接失败,database.php 中把'hostname' => 'localhost'改成'hostname' => '127.0.0.1'可绕过。
验证控制器与 URL 的大小写映射是否匹配
CodeIgniter 强制约定:URL 路径小写 → 对应控制器文件名首字母大写 → 类名首字母大写。这个规则在 Windows 本地不敏感,一上 Linux 服务器立刻 404。
- 比如想访问
/user/profile,必须有application/controllers/User.php文件,且类定义为class User extends CI_Controller。 - 若文件名误写成
user.php或USER.PHP,Linux 下就找不到;方法名如profile()不能写成Profile()或__profile()。 - 检查
routes.php:自定义路由值里的控制器名也必须小写,例如$route['blog'] = 'post/index';,写成'Post/index'会失败。
排查 FastCGI 或 PHP-FPM 是否正常工作(尤其 Nginx 环境)
Nginx 不直接解析 PHP,需通过 PHP-FPM 转发。常见错误日志里出现 Connection refused while connecting to upstream,就是 PHP-FPM 没启动或监听地址不匹配。
- 运行
systemctl status php*-fpm(如 php7.4-fpm 或 php8.1-fpm)确认服务正在运行。 - 查看 PHP-FPM 配置(通常在
/etc/php/*/fpm/pool.d/www.conf),找到listen =行,确认是 socket 路径(如/run/php/php8.1-fpm.sock)还是端口(如127.0.0.1:9000)。 - 对应修改 Nginx 的
fastcgi_pass,例如:fastcgi_pass unix:/run/php/php8.1-fpm.sock;或fastcgi_pass 127.0.0.1:9000;。


















