CodeIgniter含变量路由视图背景图片不显示问题求助
问题原因
问题核心在于相对路径的解析依赖当前页面的URL层级:
- 当页面是根路由(如
/)时,../public/assets/...会被浏览器解析为/public/assets/...,路径正确。 - 当页面是带参数的二级路由(如
/edit/abc123)时,浏览器会将当前页面路径视为/edit/abc123,此时../会跳转到/edit/目录,再拼接public/assets/...就变成了/edit/public/assets/...。结合服务器URL重写规则,最终路径被映射为public/public/assets/...,导致图片无法加载。
最优解决方案
放弃依赖层级的相对路径,改用绝对路径或CodeIgniter内置函数生成稳定的资源路径:
方案1:直接使用根目录绝对路径
将背景图片的URL改为从网站根目录开始的绝对路径,开头的/表示从根目录定位资源:
<div class="bg-image overflow-hidden " style=" background-image: url('/public/assets/images/aspersor_fundo_joao_vertical.jpg'); background-size: cover; height: 100vh;"> <div class="mask" style="background-color: rgba(0, 0, 0, 0.3); height:100vh;">
方案2:使用CodeIgniter的base_url()函数(推荐)
利用框架内置的base_url()函数生成适配项目部署路径的绝对URL,避免硬编码的局限性:
- 先在
app/Config/App.php中配置好项目的$baseURL(例如http://localhost/your-project/)。 - 在视图中通过PHP输出正确路径:
<div class="bg-image overflow-hidden " style=" background-image: url('<?= base_url('public/assets/images/aspersor_fundo_joao_vertical.jpg') ?>'); background-size: cover; height: 100vh;"> <div class="mask" style="background-color: rgba(0, 0, 0, 0.3); height:100vh;">
这种方式无论当前页面是几级路由,都会生成正确的资源路径。
临时修改路径生效的原因
你在对应视图中去掉public后,路径变为../assets/...,在二级路由页面中会被解析为/assets/...,而服务器的URL重写规则可能将/assets/...映射到了public/assets/...,所以能临时显示。但这种方式不通用,一旦路由层级变为三级(如/edit/abc123/detail),路径错误会再次出现。
内容的提问来源于stack exchange,提问作者Maria Clara Pieri Sandri
相关产品推荐
相关产品推荐

