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

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,避免硬编码的局限性:

  1. 先在app/Config/App.php中配置好项目的$baseURL(例如http://localhost/your-project/)。
  2. 在视图中通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:21:23