本地正常的CI4重构应用部署到虚拟主机的问题求助
解决CodeIgniter 4子目录部署到虚拟主机的问题
一、修正URL访问结构(去掉public路径)
因为你需要在子目录(clearwater2)下部署,且不能修改顶级域名的文档根目录(要保留其他子目录实例),按以下步骤配置:
- 在
clearwater2的根目录(对应https://ijump-trampoline.co.za/clearwater2/的服务器目录)创建index.php文件,内容如下:
<?php define('CI_DEBUG', false); // 排查阶段可改为true,生产环境设为false require_once __DIR__ . '/public/index.php';
- 同样在
clearwater2根目录创建.htaccess文件,配置URL重写:
RewriteEngine On # 跳过真实存在的文件/目录的重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将所有请求转发到根目录的index.php RewriteRule ^(.*)$ index.php/$1 [L]
- 调整CI4的基础URL配置:打开
app/Config/App.php,修改baseURL为你的子目录地址:
public $baseURL = 'https://ijump-trampoline.co.za/clearwater2/';
完成后,你就可以通过https://ijump-trampoline.co.za/clearwater2/booking访问路由,无需带public路径。
二、解决Core.enabledZlibOutputCompression异常
这个错误是因为CI4的zlib输出压缩配置与服务器的压缩设置冲突,解决方法:
打开app/Config/Core.php,将enabledZlibOutputCompression设置为false:
public $enabledZlibOutputCompression = false;
如果需要压缩功能,可依赖服务器端的zlib配置(通过phpinfo确认zlib.output_compression是否为On),无需在CI4中重复开启。
三、排查HTTP 500内部错误
500错误的具体原因需要通过日志或调试模式定位:
- 临时开启调试模式:修改
app/Config/App.php中的debug为true:
public $debug = true;
此时访问页面会显示具体的错误信息,比如权限不足、缺少PHP扩展、路径错误等。
检查服务器错误日志:登录虚拟主机的控制面板(如cPanel),找到错误日志入口,查看最近的错误记录,这是定位生产环境500错误的最可靠方式。
验证必要条件:
- 确认虚拟主机的PHP版本为8.1或兼容CI4的版本(CI4.3+支持PHP 8.1)
- 检查PHP扩展:确保
intl、mbstring、json、ctype等CI4必需的扩展已开启(可通过创建phpinfo.php文件查看) - 权限设置:确保
writable/目录及其子目录(cache、session、logs)的权限为755或775,保证PHP进程有写入权限
四、替换旧版CI3并保留原有URL结构
等CI4版本调试正常后,按以下步骤替换:
- 备份旧版
clearwater目录的所有内容 - 将
clearwater2目录的所有文件/目录移动到clearwater目录 - 修改
clearwater/app/Config/App.php中的baseURL为https://ijump-trampoline.co.za/clearwater/ - 测试原有URL(如
https://ijump-trampoline.co.za/clearwater/booking)是否正常访问
对于同一域名下的其他子目录实例,重复上述部署步骤即可,每个实例独立配置自己的baseURL和权限,不会互相干扰。
内容的提问来源于stack exchange,提问作者Andre Clements
相关产品推荐
相关产品推荐

