CI框架域名配置的核心位置在 application/config/config.php 文件里的 $config['base_url'] 参数,本地开发时还需要同时修改 hosts 文件和虚拟主机的 server_name 指向,部署到线上服务器则要结合 Nginx 或 Apache 的域名解析与重定向规则。
CI框架域名配置在哪几个关键文件里
多数CI框架新手卡在“域名配置”这一步,并不是因为操作复杂,而是因为域名相关设置分散在框架配置、Web服务器和系统解析三个层面,只要把这三层理清,后续改域名、换环境都会顺畅很多。
框架层:config.php 里的 base_url
CI框架最核心的域名配置项就是 $config['base_url'],这个值会出现在生成链接、跳转地址、表单提交等所有URL场景中,配置位置固定:
application/config/config.php
找到这一行:
$config['base_url'] = '';
留空时,CI框架会尝试自动检测当前域名,这在本地开发或临时调试时比较方便,但自动检测偶尔会受代理服务器、CLI模式或子目录部署影响,导致生成的URL端口或路径不对,所以多数情况下,建议手动填写。
手动填写示例:
$config['base_url'] = 'http://www.mydomain.com/';
注意三点:
- 末尾必须带斜杠
- HTTPS站点必须写
https:// - 如果项目在子目录,
http://www.mydomain.com/ci/,路径部分要带上子目录
对于 CodeIgniter 4 用户,文件位置变了,不再是3.x版本的 application/config/config.php,而是:
app/Config/App.php
配置项也从 $config['base_url'] 改成:
public $baseURL = 'http://www.mydomain.com/';
这是很多从CI3迁移到CI4的开发者容易踩的坑,搜索“codeigniter 域名配置在哪”时,如果按CI3的老路径找CI4项目,自然是找不到的。
Web服务器层:虚拟主机域名指向
框架里的 base_url 只是告诉CI框架“生成链接时用哪个域名”,真正让浏览器通过域名访问到项目目录,需要 Web 服务器配合。
本地开发时,如果你用 Apache,通常修改 httpd-vhosts.conf 或站点配置:
<VirtualHost :80>
ServerName ci.test
DocumentRoot "D:/www/ci_project"
<Directory "D:/www/ci_project">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Nginx 的配置则在 server 块里设置 server_name:
server {
listen 80;
server_name ci.test;
root /data/www/ci_project;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
这里的 server_name 就是Web服务器层面识别域名的关键,浏览器输入 ci.test,请求到达Web服务器,服务器对比 server_name 后把请求交给对应项目目录。
系统解析层:hosts 文件映射
在本地没有DNS服务器的情况下,域名 ci.test 无法解析到 IP,此时需要手动告诉操作系统“这个域名指向本机”。
Windows 系统修改:
C:WindowsSystem32driversetchosts
macOS / Linux 修改:
/etc/hosts
添加一行:
0.0.1 ci.test
保存后,浏览器访问 http://ci.test 才能正确到达本机 Web 服务。
三个层面缺一不可:hosts 负责域名解析,虚拟主机负责接收域名请求,CI框架 base_url 负责生成正确链接,行业共识认为,CI框架项目中域名配置出错,超过一半的情况是漏改了其中某一层。
本地开发时CI框架怎么绑定自定义域名
很多开发者不想用 localhost/ci_project 这种路径访问,而是希望用 www.mydomain.local 或 ci.test,这种场景在团队协作或模拟多站点时很常见。
实操步骤
第一步,修改 hosts 文件,添加 0.0.1 ci.test。
第二步,在 Apache 虚拟主机中添加 ServerName ci.test,DocumentRoot 指向 CI 项目根目录,Nginx 用户则设置 server_name ci.test 和 root。
第三步,打开 CI 框架的 config.php,设置:
$config['base_url'] = 'http://ci.test/';
第四步,重启 Web 服务器,刷新浏览器。
常见故障排查
- 访问
ci.test显示 404:先检查虚拟主机的DocumentRoot是否指向 CI 根目录,而不是上级目录。 - 访问后跳到
localhost:说明base_url没改成功,或者浏览器缓存了旧的重定向。 - 图片、CSS路径全错:多数情况是
base_url没带端口或子目录路径不完整。 - 浏览器提示“无法访问此网站”:hosts 文件没保存成功,或者本地DNS缓存未刷新,Windows 下可执行
ipconfig /flushdns。
CodeIgniter多域名绑定与切换场景怎么处理
同一套 CI 代码部署到测试环境、预发布环境、生产环境时,域名通常不同,手动改 base_url 不仅麻烦,还容易合代码时冲突。
base_url 留空自动检测
CI3 中把 $config['base_url'] = ''; 保持为空,框架会在运行中自动检测域名,这在绝大多数浏览器访问场景下有效,但如果你用 CLI 跑定时任务,自动检测会失败,需要手动传入域名或改用其他方案。
按环境加载不同配置
在 index.php 入口文件里根据 HTTP_HOST 切换环境,再加载对应配置,这种方式适合多环境部署且域名明确的团队。
简单示例逻辑:
switch ($_SERVER['HTTP_HOST']) {
case 'test.example.com':
define('ENVIRONMENT', 'testing');
break;
case 'www.example.com':
define('ENVIRONMENT', 'production');
break;
default:
define('ENVIRONMENT', 'development');
}
然后在不同环境的配置目录或条件逻辑中设置对应的 base_url。
环境变量方式
近年不少 CI 项目使用 .env 文件配合 vlucas/phpdotenv 或 CI4 内置环境变量支持,在 .env 中写:
app.baseURL = 'http://www.example.com/'
不同环境放置不同的 .env 文件,代码完全一致,部署时只换文件不改代码。
服务器部署CI框架域名配置容易踩的坑
线上部署比本地复杂一些,主要涉及域名解析、SSL证书、重定向规则和国内服务器备案。
域名解析与备案
如果使用国内云服务器,域名必须完成 ICP 备案后才能正常解析和访问,未备案域名指向国内服务器IP会被拦截,这是很多本地测试正常、上线后打不开的重要原因,海外服务器则无此限制,但访问速度不稳定。
HTTPS 证书与 base_url
SSL 证书安装后,base_url 必须从 http:// 改为 https://,如果漏改,会出现“混合内容”警告,或者页面跳转回 http 被强制重定向。
同时建议在 Web 服务器做强制 HTTPS 跳转:
Apache .htaccess 片段:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.)$ https://%{HTTP_HOST}/$1 [R=301,L]
Nginx 配置片段:
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
隐藏 index.php 的域名影响
CI框架默认URL是 http://www.example.com/index.php/controller/method,很多人希望去掉中间的 index.php,让域名更干净,此时需要重写规则。
Apache 在项目根目录放置 .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.)$ index.php/$1 [L]
Nginx 前面已经给出的 try_files 规则即可。
这些配置不影响域名本身,但会影响URL结构。base_url 还是默认带 index.php 的路径,生成链接时可能出现双重 index.php,需要注意。
Apache 与 Nginx 域名配置对比
| 配置项 | Apache | Nginx |
|---|---|---|
| 域名识别 | ServerName 在 VirtualHost 中 |
server_name 在 server 块中 |
| 项目目录 | DocumentRoot |
root |
| 重写规则 | .htaccess 或 VirtualHost |
location 块配合 try_files |
| 重启服务 | systemctl restart httpd 或 apachectl restart |
systemctl restart nginx |
| 配置文件路径 | /etc/httpd/conf/httpd.conf 或 /etc/apache2/sites-available/ |
/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ |
CI框架域名配置常见问题
ci框架域名配置在哪改?
CI3 项目修改 application/config/config.php 中的 $config['base_url'],CI4 项目修改 app/Config/App.php 中的 public $baseURL,本地环境还需同步修改 hosts 和虚拟主机的 server_name。
ci框架本地域名配置后无法访问怎么排查?
按三个层次逐步排查:先看 hosts 文件是否生效,命令行 ping ci.test 是否返回 0.0.1;再看虚拟主机日志是否收到该域名的请求;最后看 CI 框架 base_url 是否与访问域名完全一致,包含端口或路径时不能省略。
codeigniter 4 和 ci3 域名配置有什么区别?
CI3 使用 $config['base_url'],位于 application/config/config.php,CI4 改用 public $baseURL,位于 app/Config/App.php,并且支持 .env 文件中的 app.baseURL,CI4 不再建议在入口文件里手动改大量路径,域名配置更加集中。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/644872.html





