PHP获取包含文件路径及header.php跨目录跳转问题
解决跨目录引入header.php时的链接跳转错误问题
嘿,这个问题其实很常见——核心就是相对路径的基准页面不一样:当你从根目录的文件引入header.php时,里面的index.php相对路径是基于根目录解析的;但从MasterFolder里的文件引入时,相对路径就会以MasterFolder为基准,所以才会跳转到mysite/master/index.php而不是根目录的目标文件。下面给你几个靠谱的解决方案:
方法1:直接用网站根目录的绝对路径
最简单的办法就是把链接改成以/开头的绝对路径,这样不管从哪个目录的页面引入header.php,都会从网站根目录开始解析路径:
修改include/header.php里的代码:
<ul class="dropdown-menu"> <li><a href="/index.php">My Account</a></li> <li><a href="/somefile.php">Admin Panel</a></li> <!-- 顺便提一句,你原代码里把href写成li的class了,这会导致这个链接点不了,我帮你修正啦 --> <li><a href="/users.php">Users</a></li> </ul>
小提示:如果你的网站部署在子目录(比如
mysite/sub/),那路径要改成/sub/index.php这种形式,对应调整即可。
方法2:用PHP常量统一管理基础路径
如果后期可能要改域名或者部署路径,用常量管理会更灵活:
- 先在根目录创建一个
config.php文件,定义网站的基础URL:
<?php // 换成你实际的网站域名,HTTPS的话改成https:// define('BASE_URL', 'http://mysite/'); ?>
- 在每个需要引入header.php的页面里,先引入这个config.php:
- 根目录的页面:
<?php include 'config.php'; ?> - MasterFolder里的页面:
<?php include '../config.php'; ?>
然后再引入header.php:<?php include '../include/header.php'; ?>(MasterFolder里的路径,根目录的话是include/header.php)
- 最后修改header.php里的链接,用常量拼接:
<ul class="dropdown-menu"> <li><a href="<?php echo BASE_URL; ?>index.php">My Account</a></li> <li><a href="<?php echo BASE_URL; ?>somefile.php">Admin Panel</a></li> <li><a href="<?php echo BASE_URL; ?>users.php">Users</a></li> </ul>
以后要改域名或者部署路径,只需要改BASE_URL这一处就行,非常方便。
方法3:用HTML的<base>标签统一基准
在每个页面的<head>里加一个<base>标签,指定所有相对链接的基准URL:
不管是根目录还是MasterFolder里的页面,都在<head>里加:
<head> <base href="http://mysite/"> </head>
这样header.php里的所有相对链接都会基于这个基准URL解析,index.php就会直接指向根目录的文件了。
注意哦:
<base>标签会影响页面上所有的相对路径,包括图片、CSS、JS的引用路径,所以要确保这些资源的路径也适配这个基准,不然可能会加载失败。
内容的提问来源于stack exchange,提问作者Akshay DNG
相关产品推荐
相关产品推荐

