使用DOCUMENT_ROOT配置动态路径遇资源访问问题求助
问题分析与解决方案
核心问题
你用$_SERVER['DOCUMENT_ROOT']作为资源路径是错误的——这个变量返回的是服务器本地的文件系统路径(比如/var/www/html),但浏览器加载CSS、图片等资源需要的是URL路径(比如/portfolio/css/style.css)。把文件系统路径放到href里,浏览器会将其当作URL的一部分,自然找不到对应的资源。
解决方案
1. 改用站点根URL路径存储到Session
把$_SESSION['path']的值换成站点的URL根路径,而非文件系统路径。针对你的目录结构,站点根URL是/portfolio(假设网站部署在服务器的portfolio目录下,访问地址为http://yourdomain.com/portfolio/)。
修改head.php中的代码:
<?php session_start(); // 存储URL根路径,而非文件系统路径 $_SESSION['site_url'] = '/portfolio'; ?>
2. 修正资源引用路径
用这个URL根路径拼接资源的相对路径:
<!-- CSS Files --> <link rel="stylesheet" href="<?= $_SESSION['site_url'] . '/css/style.css' ?>">
(可选)更灵活的动态获取站点根URL
如果你的站点可能部署在不同目录下,可以动态计算站点根URL,避免硬编码:
<?php session_start(); // 获取当前脚本的目录路径(相对于域名根) $script_dir = dirname($_SERVER['SCRIPT_NAME']); // 处理根目录情况(如果index.php在域名根,script_dir会是/,需要调整) $_SESSION['site_url'] = $script_dir === '/' ? '' : $script_dir; ?>
这样不管部署在哪个目录,都能自动获取正确的URL根路径,资源引用代码保持不变:
<link rel="stylesheet" href="<?= $_SESSION['site_url'] . '/css/style.css' ?>">
额外建议
其实不需要用Session存储这个路径,因为它是站点级的固定值,直接定义一个常量会更高效:
在head.php开头定义:
<?php session_start(); define('SITE_URL', '/portfolio'); ?>
然后引用时用:
<link rel="stylesheet" href="<?= SITE_URL . '/css/style.css' ?>">
内容的提问来源于stack exchange,提问作者Daan Smit
相关产品推荐
相关产品推荐

