PHP MVC项目使用自定义路由时CSS与JavaScript加载失败问题求助
PHP MVC项目多层级URL下资源加载失败修复方案
问题根源
你页面中所有CSS、JS、图片、视频等静态资源均使用了相对路径(例如../public/assets/css/bootstrap.min.css),相对路径的解析基准由浏览器当前访问的URL层级决定:
- 访问
域名/或域名/home时,URL层级为1层,../会回退到站点根目录,可正常匹配public目录下的资源 - 访问
域名/home/index时,URL层级变为2层,../仅会回退到/home路径,浏览器会尝试从/home/public/assets/路径加载资源,自然无法找到对应文件
修复方案
方案1(最稳定,推荐):替换为站点根绝对路径
将所有静态资源引用路径改为以/开头的根绝对路径,不受当前URL层级影响:
例如将
<link rel="stylesheet" href="../public/assets/css/bootstrap.min.css">
修改为:
<link rel="stylesheet" href="/public/assets/css/bootstrap.min.css">
所有资源引用(CSS、JS、图片、视频、站内链接)都按此规则修改即可。如果你的项目部署在站点子目录下,统一加上子目录前缀即可,例如项目部署在/myproject/下,就修改为/myproject/public/assets/xxx,也可以定义全局常量存储项目根路径,后续修改更方便。
方案2:增加base标签指定基准路径
在HTML的<head>标签内添加如下代码:
<base href="/">
该标签会指定当前页面所有相对路径的解析基准,添加后原有的相对路径无需修改即可按站点根目录解析。注意该配置会影响页面内的锚点链接、站内跳转链接,添加后需要做兼容性测试。
额外优化建议
你当前在视图文件中直接引入模型文件loadImages.php执行数据查询,不符合MVC分层规范。建议将数据查询逻辑移到控制器层完成,将查询得到的$result、$result2等数据作为参数传给视图,视图仅做数据渲染即可,降低代码耦合度,后续维护更方便。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

