You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:33:18