路径正确但PHP引入的sidebar侧边栏图片在子目录页面无法显示怎么办
问题原因
这是HTML相对路径的解析规则导致的:
HTML里的相对路径是相对于当前访问的页面URL,而非被引入的PHP文件的存储路径。
- 根目录下的PHP文件引入sidebar.php时,访问URL为
域名/xxx.php,此时img/me1.png会被解析为域名/img/me1.png,路径匹配所以加载正常。 - 子文件夹下的abc.php引入sidebar.php时,访问URL为
域名/unesco-weltkulturerbe-suedafrika-reisen/abc.php,此时img/me1.png会被解析为域名/unesco-weltkulturerbe-suedafrika-reisen/img/me1.png,路径不存在所以加载失败。
顺带提醒:sidebar里的kontakt.php这类跳转链接,在子文件夹页面访问也会出现404错误,是同一个原因导致的。另外你标注的根目录里是include文件夹,但abc.php里引入路径写的是includes/sidebar.php,如果实际文件夹名是include,这里也要同步修改,否则会直接报文件引入错误。
解决方法
方案1:使用根绝对路径(最推荐,改动小无额外副作用)
把sidebar.php里所有资源路径、跳转链接前加/,表示从网站根目录开始解析:
<!-- 原来的写法 --> <img src="img/me1.png" width="18"> <a href="kontakt.php"> <!-- 修改后的写法 --> <img src="/img/me1.png" width="18"> <a href="/kontakt.php">
修改完成后,不管在多少层子目录的页面里引入sidebar,路径都能正确解析。
方案2:动态定义站点根路径(适合站点部署在子目录的场景)
如果你的网站不是部署在域名根目录,比如部署在域名/xxx/子目录下,可以先在公共配置文件里定义根路径常量,再统一输出:
- 新建公共配置文件
config.php,加入代码:
// 部署在根目录填'/',部署在子目录填'/子目录名/' define('SITE_ROOT', '/');
- 在所有需要引入公共组件的页面头部先引入config.php,再修改sidebar.php里的路径:
<img src="<?php echo SITE_ROOT; ?>img/me1.png" width="18">
方案3:设置base标签(不推荐,容易引发其他问题)
可以在所有页面的head标签里加入<base href="/">,整个页面的所有相对路径都会按照href的属性值解析,但这个规则会覆盖页面内所有锚点、相对链接,改动面大容易触发其他路径错误,不建议使用。
内容的提问来源于stack exchange,提问作者melisa
相关产品推荐
相关产品推荐

