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

如何解决PHP跳转外部URL时出现的302错误

修复cURL处理短链接跳转时的302错误

短链接返回302是临时重定向响应,你的cURL代码默认不会自动跟随这类重定向,所以才会出现问题。解决方法很简单,给cURL添加自动跟随重定向的配置即可:

关键修改点

  • 启用CURLOPT_FOLLOWLOCATION选项,让cURL自动追踪重定向
  • 可选设置CURLOPT_MAXREDIRS限制最大重定向次数,防止陷入无限循环

修改后的完整代码

<?php
    function openURL($url) {
      // 创建cURL资源
      $ch = curl_init();

      // 设置目标URL
      curl_setopt($ch, CURLOPT_URL, $url);

      // 禁用SSL证书验证(生产环境建议开启,这里保留原配置)
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

      // 返回响应内容而非成功状态码
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      // 自动跟随重定向
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      // 限制最大重定向次数为10次
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
      // 不返回响应头部
      curl_setopt($ch, CURLOPT_HEADER, 0);

      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
    }

    if (isset($_POST['clickHere'])) {
        echo openURL('https://link.short2url.in/yL9E');
    }
?>
<!DOCTYPE html>
<html>
<body>
    <form method="POST">
        <button name="clickHere">Click Here To Open External URL in PHP</button>        
    </form>
</body>
</html>

补充说明

如果你的PHP环境开启了safe_mode或者设置了open_basedir,CURLOPT_FOLLOWLOCATION会失效。这种情况下需要手动解析响应头部中的Location字段,手动发起新的请求。示例逻辑如下:

function openURL($url, $maxRedirects = 10) {
    if ($maxRedirects <= 0) {
        return false;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true); // 开启头部获取
    curl_setopt($ch, CURLOPT_NOBODY, false);

    $response = curl_exec($ch);
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $headers = substr($response, 0, $headerSize);
    $body = substr($response, $headerSize);

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 检查是否是重定向响应
    if (in_array($httpCode, [301, 302, 303, 307, 308])) {
        // 提取Location头部
        preg_match('/Location: (.*)\r\n/', $headers, $matches);
        if (!empty($matches[1])) {
            $newUrl = trim($matches[1]);
            // 递归跟随重定向
            return openURL($newUrl, $maxRedirects - 1);
        }
    }

    return $body;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28