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

Linux本地XAMPP环境如何使用__DIR__常量实现header正确跳转

PHP重定向适配任意部署目录的实现方案

问题根因

header('Location:') 要求传入Web可访问的URL路径,而__DIR__返回的是服务器本地文件系统的绝对路径,二者不属于同一地址体系,因此无法直接拼接用于跳转。

核心实现思路

通过计算当前文件系统路径与Web服务文档根目录的差值,得到当前目录对应的Web相对访问路径,再拼接域名信息生成可用的跳转前缀,完全适配不同部署目录的场景。

代码实现

你可以在项目公共配置文件中提前定义全局跳转常量,后续所有重定向逻辑直接调用常量即可:

<?php
// 1. 拼接当前访问协议 + 域名
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
define('WEB_DOMAIN', $protocol . '://' . $_SERVER['HTTP_HOST']);

// 2. 计算当前目录相对于文档根的Web路径
// 替换目录分隔符为Web标准的斜杠,兼容Windows/Linux环境
$dirPath = str_replace(DIRECTORY_SEPARATOR, '/', __DIR__);
$docRoot = str_replace(DIRECTORY_SEPARATOR, '/', $_SERVER['DOCUMENT_ROOT']);
$relativeWebPath = substr($dirPath, strlen($docRoot));

// 3. 定义当前目录的Web可访问前缀常量
define('CURRENT_WEB_PATH', WEB_DOMAIN . $relativeWebPath);
?>

使用示例

跳转同目录下的file.php直接调用常量拼接即可:

header('Location: ' . CURRENT_WEB_PATH . '/file.php');
// 跳转后必须终止脚本执行,避免后续逻辑异常
exit;

补充优化方案

如果不需要生成完整的绝对URL,也可以直接使用相对路径跳转,浏览器会自动基于当前访问路径解析:

  • 同目录跳转:header('Location: file.php');
  • 上级目录跳转:header('Location: ../other/file.php');
  • 站点根目录跳转:header('Location: /root_file.php');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:09:03