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

PHP Redirect Header函数失效求助:跳转地址格式异常

PHP重定向脚本异常原因及修复方案

问题根源

  1. 强制拼接当前域名:你的脚本默认把所有传入的$url当作站内相对路径,不管它是外部链接还是内部路径,都强制拼在当前域名后面,所以传入google.com时,就会生成http://website.com/google.com/;如果$url开头带/,就会出现双斜杠(比如website.com//google.com/)。
  2. 未识别外部完整URL:脚本没有判断传入的$url是否是带协议头的完整外部链接,导致外部地址被错误处理成内部路径。

修复后的代码

public function redirect($url, $permanent = false) {
    // 先判断是否是完整的外部URL(带http/https协议)
    if (preg_match('/^https?:\/\//i', $url)) {
        $redirectUrl = $url;
    } else {
        // 处理相对路径,拼接当前域名和协议
        $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http';
        $domain = $_SERVER['HTTP_HOST'];
        // 去掉$url开头的斜杠,避免双斜杠
        $cleanUrl = ltrim($url, '/');
        $redirectUrl = $protocol . '://' . $domain . '/' . $cleanUrl;
    }

    header('Location: ' . $redirectUrl, true, $permanent ? 301 : 302);
    exit();
}

关键改动说明

  • 新增正则判断:用preg_match('/^https?:\/\//i', $url)识别带协议头的完整URL,这类URL直接使用,不拼接当前域名。
  • 清理相对路径:用ltrim($url, '/')去掉$url开头的斜杠,避免拼接后出现双斜杠(比如website.com//xxx)。
  • 逻辑拆分:把外部URL和内部相对路径的处理分开,保证两种场景都能正常跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:17:43