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
相关产品推荐
相关产品推荐

