2026.06.04 | youres | 24次围观
curl批量检测重定向次数和最终URL:3个实战脚本让网站巡检自动化
在网站运维和SEO优化工作中,经常需要批量检测一组URL的重定向情况——跳转了几次?最终跳到哪里?有没有无限重定向循环?手动一个一个测显然不现实,今天分享3个实战脚本,让你用curl批量检测重定向次数和最终URL,网站巡检效率提升10倍。
一、为什么需要批量检测重定向
常见场景:
- 短链参数追踪:营销活动中使用了短链,需要知道短链跳转了几次、最终URL是否保留了UTM参数
- 网站迁移验证:旧域名301到新域名,需要批量验证所有旧URL都能正确跳转到新URL
- 死链检测:批量检测URL是否返回404或500,及时清理死链
- CDN配置验证:验证CDN的回源重定向配置是否正确
二、核心变量:num_redirects 和 url_effective 详解
curl的-w(或--write-out)参数提供了两个关键变量,专门用于重定向检测:
1. num_redirects:重定向次数
curl -L -w "重定向次数:%{num_redirects}\n" -o /dev/null -s https://example.com
输出示例:重定向次数:2
注意事项:
- 必须配合
-L参数使用,否则num_redirects始终输出0 - 如果重定向次数超过
--max-redirs限制(默认50),curl会报错退出 - 可以用
--max-redirs 0禁用重定向,此时num_redirects输出0
2. url_effective:最终URL
curl -L -w "最终URL:%{url_effective}\n" -o /dev/null -s https://example.com
输出示例:最终URL:https://www.example.com/
注意事项:
- 即使不加
-L参数,url_effective也会输出最终请求的URL - 如果需要获取重定向链路的每一个URL,需要配合
-v参数解析输出
三、脚本一:批量检测重定向次数并输出CSV
需求:给定一个URL列表文件,批量检测每个URL的重定向次数,并输出CSV格式的报告。
#!/bin/bash
# 文件名:batch_redirect_check.sh
# 用法:./batch_redirect_check.sh url_list.txt > report.csv
INPUT_FILE=""
echo "URL,重定向次数,最终URL,HTTP状态码"
while IFS= read -r url || [[ -n "" ]]; do
# 跳过空行和注释行
[[ -z "" || "" =~ ^# ]] && continue
# 使用curl检测
result=
# 解析结果
redirect_count=
final_url=
http_code=
# 输出CSV行
echo "\"\",\"\",\"\",\"\""
# 友好延迟,避免被封
sleep 0.5
done < ""
使用方法:
- 创建URL列表文件
url_list.txt,每行一个URL - 运行脚本:
chmod +x batch_redirect_check.sh && ./batch_redirect_check.sh url_list.txt > report.csv - 用Excel或WPS打开
report.csv查看报告
四、脚本二:批量获取最终URL并检测死链
需求:批量获取每个URL的最终URL,同时检测是否有死链(HTTP状态码>=400)。
#!/bin/bash
# 文件名:batch_final_url.sh
# 用法:./batch_final_url.sh url_list.txt
INPUT_FILE=""
echo "检查中..."
echo "=================="
while IFS= read -r url || [[ -n "" ]]; do
[[ -z "" || "" =~ ^# ]] && continue
# 获取最终URL和HTTP状态码
final_url=
http_code=
# 判断是否有重定向
if [[ "" != "" ]]; then
echo "✓ "
echo " -> 最终URL: "
echo " -> HTTP状态码: "
else
echo "✗ (无重定向)"
echo " -> HTTP状态码: "
fi
# 检测死链
if [[ "" -ge 400 ]]; then
echo " ⚠️ 警告:HTTP状态码 ,可能是死链!"
fi
echo ""
sleep 0.5
done < ""
五、脚本三:并行批量检测提升10倍效率
前面的脚本是串行的,每个URL要等前一个完成才能开始。对于大量URL的巡检,可以使用xargs实现并行检测。
#!/bin/bash
# 文件名:batch_redirect_parallel.sh
# 用法:./batch_redirect_parallel.sh url_list.txt
INPUT_FILE=""
MAX_PARALLEL=10 # 最大并行数
echo "URL,重定向次数,最终URL,HTTP状态码"
cat "" | grep -v '^#' | grep -v '^$' | xargs -P "" -I {} bash -c '
url="{}"
result=
redirect_count=
final_url=
http_code=
echo "\"\",\"\",\"\",\"\""
'
注意事项:
-P 10表示最多同时运行10个curl进程,可以根据服务器性能调整- 并行检测时,输出顺序可能乱序,可以在输出中加入序号来排序
- 避免对单个域名并行过多请求,可能被WAF封IP
六、实战案例:短链UTM参数追踪
营销活动中,经常需要验证短链是否正确传递了UTM参数。可以用以下脚本批量检测:
#!/bin/bash
# 文件名:check_utm_passthrough.sh
# 用法:./check_utm_passthrough.sh
echo "短链URL,最终URL,UTM参数是否保留"
short_links=(
"https://t.co/xxx?utm_source=wechat&utm_medium=social"
"https://bit.ly/xxx?utm_campaign=spring_sale"
# 添加更多短链...
)
for url in ""; do
final_url=
# 检查UTM参数是否出现在最终URL中
if [[ "" == *"utm_"* ]]; then
echo "\"\",\"\",\"是\""
else
echo "\"\",\"\",\"否(参数丢失)\""
fi
done
七、总结
本文介绍了3个实战脚本,帮助你用curl批量检测重定向次数和最终URL:
- 脚本一:批量检测重定向次数并输出CSV,适合生成结构化报告
- 脚本二:批量获取最终URL并检测死链,适合网站迁移验证
- 脚本三:并行批量检测,适合大规模URL巡检
掌握这些脚本,你的网站运维效率将大幅提升。
相关文章推荐:
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论