巡检对每个地址只取最终状态,跳转过程中间经过几跳、指向哪里都不记录,直到索引里的规范地址全被换成了中间页,才发现有批链接要跳五次才到正文。

这类报错背后常见的原因有几处,逐个排除就行。curl 默认跟随跳转,只输出最后的结果。少数情况下是巡检没有限制最大跳转次数。

少数情况下是跳转链里的中间地址没有单独监控。

第一件事是看单条地址跳了几次

curl -s -o /dev/null -w '%{num_redirects} %{url_effective}\n' -L https://www.example.com/old/1

不跟随跳转逐跳记录 Location

curl -sI https://www.example.com/old/1 | grep -i '^location'

末了把超过两跳的链拉清单

for u in $(cat sample.txt); do n=$(curl -s -o /dev/null -w '%{num_redirects}' -L $u); [ $n -gt 2 ] && echo "$n $u"; done

这类问题以前遇到过,但这次的触发条件和上次不一样。

改完先别撤,确认这几项。整理出 800 条多跳链并压成一跳后,抓取日志里的 301 次数下降六成,规范地址回到正文页。

容易忽略的是,跟随跳转省事但会藏住问题,巡检至少要有一个"不跟随"的视角。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189