0

curl批量检测重定向次数和最终URL:3个实战脚本让网站巡检自动化

2026.06.04 | youres | 23次围观

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 < ""

使用方法:

  1. 创建URL列表文件 url_list.txt,每行一个URL
  2. 运行脚本:chmod +x batch_redirect_check.sh && ./batch_redirect_check.sh url_list.txt > report.csv
  3. 用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:

  1. 脚本一:批量检测重定向次数并输出CSV,适合生成结构化报告
  2. 脚本二:批量获取最终URL并检测死链,适合网站迁移验证
  3. 脚本三:并行批量检测,适合大规模URL巡检

掌握这些脚本,你的网站运维效率将大幅提升。

相关文章推荐:

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论