公共header文件引入外部JS,子页面访问提示文件找不到如何解决?
问题根源
静态资源的相对路径是浏览器根据当前访问的页面URL解析的,和服务端PHP文件的include路径没有关联:
- 访问
index.php时页面URL是站点根目录,js/file.js会被解析为/js/file.js,路径正确 - 访问
/page/asd.php时页面URL处于/page/目录下,相对路径js/file.js会被拼接为/page/js/file.js,自然找不到资源
解决方案
方案1(最简通用)
直接修改header.php中的script标签src,使用站点根绝对路径即可:
<script src="/js/file.js"></script>
路径开头的/代表站点根目录,不管你在哪个层级的页面引入这个header,浏览器都会从根目录开始查找资源,不会受当前页面路径影响。
方案2(适合多环境部署场景)
如果你的站点可能部署在域名的子目录下,比如website.com/blog/这类场景,可以用PHP定义全局根路径常量,方便后续统一修改:
- 在公共配置文件中定义站点根URL:
// 实际部署时修改为你的站点根路径,子目录部署就填写对应子目录路径即可 define('SITE_ROOT', '/');
- 修改
header.php的资源引入代码:
<script src="<?php echo SITE_ROOT; ?>js/file.js"></script>
后续站点迁移路径变化时,只需要修改SITE_ROOT的值即可,不需要逐个修改所有资源路径。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

