CodeIgniter虚拟主机配置关键在于DocumentRoot指向正确入口:CI3指向含index.php的项目根目录,CI4必须指向public/子目录,否则暴露敏感目录;需配合.htaccess、base_url和index_page设置。

CodeIgniter 在虚拟主机上配置网站根目录,关键不是“把整个项目丢进去”,而是让 Web 服务器的 DocumentRoot 指向正确的入口位置——这个位置取决于你用的是 CI3 还是 CI4。
CI3:DocumentRoot 指向项目根目录(含 index.php)
CI3 的入口文件 index.php 和 application/、system/ 同级。虚拟主机必须把网站根目录设为该完整目录的路径,例如:
-
/var/www/html/my-ci3-site/(Linux 共享主机常见路径) -
D:\www\my-ci3-site\(Windows 虚拟主机)
确保该目录下能直接访问到 index.php,且 .htaccess 文件存在并生效(Apache 环境下需开启 mod_rewrite 并设置 AllowOverride All)。
CI4:DocumentRoot 必须指向 public/ 子目录
CI4 采用安全入口模式,index.php 和静态资源(CSS/JS)都在 public/ 目录内。虚拟主机的根目录不能设为项目顶层,否则会暴露 app/、writable/ 等敏感目录。
- 正确路径示例:
/var/www/html/my-ci4-site/public/ - 错误路径示例:
/var/www/html/my-ci4-site/(会导致安全隐患和 404)
此时 .htaccess 文件也必须放在 public/ 目录下,且内容需适配 CI4 的路由规则(如使用 try_files 的 Nginx 配置也需以 public/ 为 root)。
无论 CI3 还是 CI4,都必须检查 base_url 和 index_page
打开 app/config/config.php(CI4)或 application/config/config.php(CI3),确认以下两项:
-
$config['base_url']应设为你的实际域名路径,如'https://example.com/'(结尾带斜杠) -
$config['index_page']推荐留空(''),但前提是 URL 重写已正常工作;若未配置重写,可暂时设为'index.php'保证基础访问
常见虚拟主机限制下的应对方式
很多共享虚拟主机不支持修改 httpd.conf 或 nginx.conf,只能靠 .htaccess 或控制面板设置根目录:
- 在控制面板(如 cPanel)中,将“主域名”或“子域名”的文档根目录手动改为对应路径(CI3 选项目根,CI4 选
public/) - 若只能上传文件、无法改根目录,可尝试将
public/内所有文件(含index.php)复制到虚拟主机默认根目录,并把app/、writable/等移到上级不可访问目录,再通过index.php中调整$paths['app']和$paths['writable']的路径常量来适配


















