You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中资源文件相对路径在多控制器下失效问题排查

解决CodeIgniter中资源路径随控制器变化的问题

你碰到的这个问题其实很常见,核心原因是浏览器对相对路径的解析规则:浏览器会根据当前页面的URL层级来解析相对路径,当你访问Login这类控制器时,页面URL变成了http://localhost/project/login,浏览器会把你定义的assets/frontend/...当成当前路径(login/)下的子路径,所以才会出现login/assets/...这种错误路径。

下面给你几个靠谱的解决方案:

1. 把常量改成基于根目录的绝对路径

你之前在constants.php里定义的是相对路径,改成结合base_url()的绝对路径就不会受当前URL影响了:

// config/constants.php
define("ASSETS", base_url("assets/frontend/"));

之后在视图里加载资源的时候直接用这个常量:

<link rel="stylesheet" href="<?php echo ASSETS; ?>plugins/css/bootstrap.min.css">

这样不管你访问哪个控制器,资源路径都会是http://localhost/project/assets/frontend/...这种正确的根路径。

2. 直接在视图中用base_url()拼接路径

如果不想修改常量,也可以直接在视图里写完整的绝对路径:

<link rel="stylesheet" href="<?php echo base_url('assets/frontend/plugins/css/bootstrap.min.css'); ?>">

这种写法更直观,也能避免相对路径带来的问题。

3. 检查URL重写的.htaccess配置

如果你开启了URL重写(去掉了index.php),还要确保.htaccess的配置正确,特别是项目在子目录下的情况:

RewriteEngine On
# 注意这里要改成你的项目子目录名称
RewriteBase /project/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

错误的RewriteBase配置也可能导致资源路径解析异常。

总结一下,本质就是要让资源路径变成基于网站根目录的绝对路径,而不是依赖当前页面URL的相对路径,这样就能解决不同控制器下资源加载失败的问题了。

内容的提问来源于stack exchange,提问作者Syed Saqlain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:14:10