2026.06.05 | youres | 18次围观
摘要
curl的--max-redirs参数不仅能限制重定向次数,还能通过逐层截断的方式精准排查重定向链路中的参数丢失问题。本文介绍3个实战技巧,帮你快速定位UTM参数在哪一跳丢失。
什么是--max-redirs逐层截断诊断
默认情况下curl -L会一直跟随重定向直到结束。但当你用--max-redirs N限制跳数后,curl最多只跟N跳,超过的部分会被截断。
利用这个特性,逐步增加N的值,配合-v查看每一跳服务器返回的Location头,就能精准定位参数在哪一层丢失。
技巧1:配合-v参数逐层查看Location头
这是最实用的方法。通过逐步增加--max-redirs的值,可以看到每一跳的重定向目标:
# 第1步:只看第1跳(不跟随重定向)
curl -v -L --max-redirs 0 "https://short.url/abc?utm_source=google" 2>&1 | Select-String "Location"
# 第2步:允许1次重定向,看前2跳
curl -v -L --max-redirs 1 "https://short.url/abc?utm_source=google" 2>&1 | Select-String "Location"
# 第3步:允许2次重定向,看前3跳
curl -v -L --max-redirs 2 "https://short.url/abc?utm_source=google" 2>&1 | Select-String "Location"
逐层对比Location头中的UTM参数,当发现某一跳的Location里参数消失了,问题就定位到了。
技巧2:配合-I参数只查看响应头(不发正文)
用-I(HEAD请求)代替-L跟随,可以只查看响应头而不下载页面正文,速度更快:
# 查看第1跳响应头(不跟随重定向)
curl -I --max-redirs 0 -s "https://example.com/landing?utm_campaign=spring" | Select-String "Location"
# 查看前2跳响应头
curl -I -L --max-redirs 1 -s "https://example.com/landing?utm_campaign=spring" 2>&1 | Select-String "Location"
注意:部分服务器对HEAD和GET请求的处理方式不同,如果发现结果有差异,改用技巧1的-v方法。
技巧3:结合-w url_effective查看最终到达的URL
url_effective显示curl最终实际访问到的URL。配合--max-redirs截断,可以对比不同跳数下最终到达的URL:
# 只看前1跳最终到达哪里
curl -s -L --max-redirs 0 -w "url_effective: %{url_effective}\n" -o "https://short.url/xxx?utm_source=news"
# 看前2跳最终到达哪里
curl -s -L --max-redirs 1 -w "url_effective: %{url_effective}\n" -o "https://short.url/xxx?utm_source=news"
# 完整跟随,看最终URL
curl -s -L --max-redirs 10 -w "url_effective: %{url_effective}\n" -o "https://short.url/xxx?utm_source=news"
如果--max-redirs 1和--max-redirs 10的url_effective不一样,说明在第2跳之后参数还在,但更后面的某一跳丢失了。
实战案例:营销短链UTM参数丢失排查
假设你发现一个营销短链的UTM参数在重定向后丢失了,用逐层截断法排查:
# 第1步:检查短链第1跳是否保留UTM参数
curl -v -L --max-redirs 0 "https://your-brand.link/summer-sale?utm_source=wechat&utm_medium=social" 2>&1 | Select-String "Location"
# 假设输出:Location: https://www.youres.cn/promo/summer?utm_source=wechat&utm_medium=social
# → 第1跳参数还在,继续查第2跳
# 第2步:检查第2跳
curl -v -L --max-redirs 1 "https://your-brand.link/summer-sale?utm_source=wechat&utm_medium=social" 2>&1 | Select-String "Location"
# 假设输出:Location: https://www.youres.cn/promo/summer
# → 发现问题!第2跳的Location头中没有UTM参数,被Strip掉了
定位到问题后,去Nginx或后端应用中修复重定向配置,添加或等效参数保留配置。
注意事项
- Windows PowerShell用户:把
grep换成Select-String,把/dev/null换成 - HTTPS证书问题:如果遇到证书错误,临时加
-k参数跳过验证 - 重定向链路很长:如果超过5跳,建议写个简单脚本批量跑
--max-redirs 0~N
相关文章
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论