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

无需硬编码获取开发及生产环境下的网站根目录(含虚拟目录)

动态获取PHP网站根目录(无需硬编码虚拟目录)

这问题我做项目时也踩过坑,硬编码虚拟目录的话,切换开发/生产环境或者后续迁移站点简直是噩梦。给你写个完全动态的PHP函数,不管你的站点是在域名根目录还是虚拟目录下,都能精准返回作为相对路径起始点的网站根目录URL:

function getSiteRoot() {
    // 获取当前脚本的服务器路径和URL路径
    $scriptFilename = $_SERVER['SCRIPT_FILENAME'];
    $scriptName = $_SERVER['SCRIPT_NAME'];
    
    // 计算脚本在文件系统中的相对位置(相对于网站根目录)
    $relativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $scriptFilename);
    $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', $relativePath);
    
    // 从脚本URL中移除相对路径,得到网站根目录的URL
    $siteRoot = str_replace($relativePath, '', $scriptName);
    
    // 拼接协议(http/https)和域名部分
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https://' : 'http://';
    $domain = $_SERVER['HTTP_HOST'];
    
    // 组合完整的根目录URL,确保结尾有斜杠
    $fullRoot = rtrim($protocol . $domain . $siteRoot, '/') . '/';
    
    return $fullRoot;
}

函数工作原理:

  • 利用$_SERVER['DOCUMENT_ROOT'](网站根目录的文件系统路径)和$_SERVER['SCRIPT_FILENAME'](当前执行脚本的完整路径),算出脚本相对于根目录的位置
  • 再结合$_SERVER['SCRIPT_NAME'](当前脚本的URL路径),剥离掉脚本部分,得到根目录的URL路径
  • 自动识别HTTP/HTTPS协议,拼接域名后返回完整的根目录URL,并且保证结尾带有斜杠(方便后续拼接相对路径)

测试场景验证:

  • 开发环境(http://localhost/mygreatapp):调用getSiteRoot()会返回 http://localhost/mygreatapp/
  • 当前生产环境(http://www.myawesomesite.com):返回 http://www.myawesomesite.com/
  • 未来迁移后(http://www.myawesomesite.com/mygreatapp):自动返回 http://www.myawesomesite.com/mygreatapp/

使用的时候直接调用这个函数就行,完全不用修改任何硬编码内容,适配各种部署场景。

内容的提问来源于stack exchange,提问作者toddmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:03:46