如何追踪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
相关产品推荐
相关产品推荐

