2026.06.15 | youres | 6次围观
目录
- 为什么需要批量检测多域名重定向链路
- 核心原理:curl -L -w 变量组合
- 脚本一:批量输出多域名重定向次数和最终URL
- 脚本二:输出完整跳转链路(每一跳的Location)
- 脚本三:JSON结构化输出,方便程序解析
- 性能优化:xargs并行加速
- 相关阅读
为什么需要批量检测多域名重定向链路
运维巡检、SEO诊断、CDN迁移验证,都绕不开一个问题:一批域名的最终访问地址到底是什么?中间跳了几次?每次跳到哪里?
手动一个个curl太慢,写个批量脚本一次扫完全部域名,结果一目了然。
核心原理:curl -L -w 变量组合
批量检测的核心是把 curl 的两个能力组合起来:
-L:跟随重定向-w/--write-out:请求完成后输出指定变量
最关键的几个变量:
| 变量 | 含义 |
|---|---|
%{num_redirects} | 重定向次数 |
%{url_effective} | 最终生效URL(跳转终点) |
%{http_code} | 最终HTTP状态码 |
%{time_total} | 总耗时(秒) |
单条命令示例:
curl -s -L -o /dev/null -w "次数:%{num_redirects} 终点:%{url_effective} 状态码:%{http_code}\n" https://example.com
脚本一:批量输出多域名重定向次数和最终URL
把要检测的域名写进 urls.txt,一行一个:
# urls.txt
https://www.youres.cn
https://httpbin.org/redirect/3
https://baidu.com
https://github.com
批量检测脚本 batch_redirect.sh:
#!/bin/bash
while IFS= read -r url; do
[ -z "$url" ] && continue
result=$(curl -s -L -o /dev/null \
-w "次数:%{num_redirects} 终点:%{url_effective} 状态码:%{http_code}" \
"$url")
echo "$url => $result"
done < urls.txt
输出效果:
https://www.youres.cn => 次数:0 终点:https://www.youres.cn 状态码:200
https://httpbin.org/redirect/3 => 次数:3 终点:https://httpbin.org/get 状态码:200
https://baidu.com => 次数:1 终点:https://www.baidu.com/ 状态码:200
脚本二:输出完整跳转链路(每一跳的Location)
上面的脚本只看到次数和终点,看不到中间每一跳去了哪。用 -I 逐层打印可以解决这个问题:
#!/bin/bash
url="$1"
max=10
for i in $(seq 1 $max); do
loc=$(curl -sI "$url" | grep -i "^location:" | awk '{print $2}' | tr -d "\r")
code=$(curl -sI "$url" | grep -i "HTTP/" | tail -1 | awk '{print $2}')
echo "第$i跳: $url (状态码:$code)"
[ -z "$loc" ] && break
url="$loc"
done
更简洁的做法是用 -L -v 让 curl 自己打印跳转过程:
curl -L -v https://example.com 2>&1 | grep -i "location:"
脚本三:JSON结构化输出,方便程序解析
巡检结果要入库或传给监控平台,JSON 格式最方便。配合 jq 可以做到:
#!/bin/bash
while IFS= read -r url; do
[ -z "$url" ] && continue
data=$(curl -s -L -o /dev/null \
-w "%{num_redirects},%{url_effective},%{http_code},%{time_total}" \
"$url")
IFS=',' read -r redirects final_url http_code time_total <<< "$data"
jq -n \
--arg url "$url" \
--argjson redirects "$redirects" \
--arg final_url "$final_url" \
--arg http_code "$http_code" \
--arg time_total "$time_total" \
'{url:$url,redirects:$redirects,final_url:$final_url,http_code:$http_code,time_total:($time_total|tonumber)}'
done < urls.txt
性能优化:xargs并行加速
域名多的时候,串行检测太慢。用 xargs -P 并行跑,速度提升明显:
cat urls.txt | xargs -P 10 -I {} bash -c \
'result=$(curl -s -L -o /dev/null -w "%{num_redirects} %{url_effective} %{http_code}" "{}"); echo "{} => $result"'
-P 10 表示最多并发10个进程,根据服务器负载调整。
相关阅读
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论