HTML页面引入JS时相对路径问题:多页面共用head.php的适配咨询
这个问题其实是PHP包含文件时相对路径的经典坑——因为include是把代码插入到当前页面执行,所以相对路径是相对于当前执行的PHP文件,而不是被包含的head.php本身。给你几个靠谱的解决方案,按推荐程度排序:
1. 使用网站根目录绝对路径(最推荐)
直接用斜杠/开头的路径,它会从网站的根目录开始查找文件,不管当前页面在哪个子目录下都能正确定位。
假设你的域名直接指向/www/site1/(也就是site1是网站的根目录),那head.php里的JS引入可以改成:
<script src="/js/jquery.min.js"></script> <script src="/js/jquery-ui.js"></script> <script src="/js/bootstrap.min.js"></script>
这样不管是index.php(根目录)还是view/page1.php(子目录),都会正确指向/www/site1/js/下的文件。
如果site1不是网站根(比如域名指向/www/,访问site1需要用http://yourdomain/site1/),那路径改成:
<script src="/site1/js/jquery.min.js"></script>
你也可以用PHP的超全局变量动态获取根路径,避免硬编码:
// 动态获取站点根路径(适用于部署环境变化的情况) $site_root = '/site1/'; // 或者更灵活的方式: // $site_root = dirname($_SERVER['SCRIPT_NAME']) . '/'; ?> <script src="<?php echo $site_root; ?>js/jquery.min.js"></script>
2. 定义全局根路径常量
如果你的项目有多个页面需要用到根路径,可以在入口文件(比如index.php)或者全局配置文件里定义一个常量,然后在head.php里复用:
首先在index.php开头添加:
// 定义站点根路径常量,根据实际部署情况调整 define('SITE_ROOT', '/site1/');
然后在head.php里使用这个常量:
<script src="<?php echo SITE_ROOT; ?>js/jquery.min.js"></script> <script src="<?php echo SITE_ROOT; ?>js/jquery-ui.js"></script> <script src="<?php echo SITE_ROOT; ?>js/bootstrap.min.js"></script>
这种方式的好处是,以后如果站点根目录变化,只需要修改常量的值,不需要逐个修改所有引入路径。
3. 不推荐:通过上级目录相对路径适配(扩展性差)
这种方法需要根据当前页面的位置动态调整相对路径,比如在head.php里判断当前页面是否在view目录下,然后选择../js/或者js/:
<?php // 判断当前执行文件的路径是否包含view目录 if (strpos($_SERVER['SCRIPT_NAME'], '/view/') !== false) { $js_path = '../js/'; } else { $js_path = 'js/'; } ?> <script src="<?php echo $js_path; ?>jquery.min.js"></script>
但这种方法扩展性很差——如果以后新增了admin/、user/等子目录,你需要不断修改判断逻辑,很容易出错,所以不推荐使用。
内容的提问来源于stack exchange,提问作者John Wick

