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

如何追踪URL重定向至最终地址?PHP获取Airbnb短链目标URL方法

我来帮你解决这两个关于URL重定向追踪的问题,分通用方法和PHP具体实现来说明:

如何追踪URL重定向,获取其最终指向的地址?

不管是调试短链接还是排查跳转问题,追踪重定向的方法可以分场景选择:

  • 浏览器端快速排查:打开浏览器开发者工具(按F12),切换到「网络」面板,清空现有请求后访问目标URL。你会看到所有跳转请求,每个重定向请求的状态码都是3xx(比如301永久重定向、302临时重定向),最后返回200状态码的请求对应的URL就是最终地址。
  • 命令行工具(curl):如果习惯用终端,直接执行 curl -L -v <你的目标URL>。-L 参数会让curl自动跟随重定向,-v 会输出详细的跳转过程,包括每一步的状态码和跳转地址,最后就能看到最终的目标URL。
  • 通用编程思路:不管用什么语言,核心逻辑都是:发送HTTP请求 → 检查响应状态码,如果是3xx且存在Location响应头 → 用Location里的地址再次发送请求 → 重复直到拿到非3xx的响应,此时的请求地址就是最终目标。

如何在PHP中获取Airbnb短链接的最终目标URL?

Airbnb的短链接确实会经过多次重定向(你提到的三次),用PHP的话,最可靠的方式是用cURL扩展来自动处理跳转,以下是可直接复用的代码:

function getFinalRedirectUrl($shortUrl) {
    // 初始化cURL会话
    $curlHandle = curl_init($shortUrl);
    
    // 配置选项:只请求头部,不下载内容(节省资源)
    curl_setopt($curlHandle, CURLOPT_NOBODY, true);
    // 开启自动跟随重定向
    curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true);
    // 设置最大重定向次数,防止无限循环
    curl_setopt($curlHandle, CURLOPT_MAXREDIRS, 10);
    // 禁止输出响应内容到页面
    curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
    
    // 执行请求
    curl_exec($curlHandle);
    
    // 获取最终跳转后的有效URL
    $finalUrl = curl_getinfo($curlHandle, CURLINFO_EFFECTIVE_URL);
    
    // 关闭cURL会话
    curl_close($curlHandle);
    
    return $finalUrl;
}

// 测试Airbnb短链接
$airbnbShortLink = 'https://abnb.me/Vt3MA7vVyM';
echo "最终目标URL:" . getFinalRedirectUrl($airbnbShortLink);

代码细节说明:

  • CURLOPT_FOLLOWLOCATION:这是核心,开启后cURL会自动跟随所有3xx重定向,不用手动处理每一步跳转
  • CURLOPT_MAXREDIRS:设置最大跳转次数(这里设为10),避免遇到恶意的无限重定向循环
  • CURLINFO_EFFECTIVE_URL:专门用来获取最终请求的URL,不管经过多少次跳转,都能直接拿到结果

如果你的PHP环境没有启用cURL扩展,也可以用原生的stream_context来实现:

function getFinalRedirectUrlWithoutCurl($shortUrl) {
    // 创建流上下文,配置跟随重定向
    $context = stream_context_create([
        'http' => [
            'follow_location' => true,
            'max_redirects' => 10,
            'method' => 'HEAD' // 只请求头部,减少数据传输
        ]
    ]);
    
    // 获取响应头部
    $headers = get_headers($shortUrl, 1, $context);
    
    // 处理重定向:如果Location是数组(多次跳转),取最后一个元素
    if (isset($headers['Location'])) {
        $finalUrl = is_array($headers['Location']) ? end($headers['Location']) : $headers['Location'];
    } else {
        $finalUrl = $shortUrl;
    }
    
    return $finalUrl;
}

// 测试
echo "最终目标URL:" . getFinalRedirectUrlWithoutCurl('https://abnb.me/Vt3MA7vVyM');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:51