修改XAMPP Apache端口为81后CodeIgniter项目资源链接404如何解决
问题原因
- 核心是CodeIgniter的全局站点根URL配置
base_url没有包含自定义的81端口:- 如果你在
application/config/config.php里手动写死了$config['base_url'] = 'http://localhost/project_name/';,没有带上端口,CI生成所有站点链接的时候都会用这个不带端口的域名,资源路径拼接也会基于这个配置,就会丢失81端口。 - 如果你留空了
base_url让CI自动检测,部分旧版本CI的自动识别逻辑不会主动抓取非80/443的自定义端口,也会出现端口丢失的问题。
- 如果你在
- 额外排查点:如果你的Apache配置或者
.htaccess规则里写了强制跳转的规则,跳转目标没有带81端口,也会导致访问的时候端口被抹掉。
解决方法
- 修改CodeIgniter的base_url配置
打开项目路径下的application/config/config.php,找到base_url配置项,修改为带端口的完整根地址:
$config['base_url'] = 'http://localhost:81/project_name/';
注意末尾的斜杠要保留,避免拼接路径的时候出现错误。
- 所有资源链接统一用CI的
base_url()函数生成
不要直接写相对路径的href,改为用CI提供的方法拼接完整路径,确保端口统一:
原来的写法:
<link rel="stylesheet" href="css/style.css">
修改为:
<link rel="stylesheet" href="<?php echo base_url('css/style.css'); ?>">
生成出来的路径会自动带上你配置的端口,变成http://localhost:81/project_name/css/style.css,不会出现404。
- 可选:修复自动识别逻辑(适合多环境部署的场景)
如果不想写死端口方便多环境切换,可以修改base_url的自动识别逻辑,加入端口判断:
$config['base_url'] = 'http'; if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') $config['base_url'] .= "s"; $config['base_url'] .= "://".$_SERVER['HTTP_HOST']; $config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$_SERVER['HTTP_HOST']本身会自带访问时的端口号,这样不管你换什么端口,都会自动识别到正确的根地址。
- 排查重定向规则
如果修改完还是有问题,检查项目根目录的.htaccess文件,或者Apache的vhost配置,有没有写死跳转地址的规则,把对应的地址也加上81端口即可。
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

