Windows命令行检测网站301重定向的完整指南

核心答案: 在Windows PowerShell中,直接使用curl会调用Invoke-WebRequest别名而非原生curl工具。要准确检测301重定向,请使用curl.exe -I URL(查看响应头)或(Invoke-WebRequest -Uri "URL" -MaximumRedirection 0).StatusCode(查看状态码)。

Windows命令行检测网站301重定向的完整指南


一、问题根源:PowerShell的curl陷阱

在Windows PowerShell中,输入curl并不会调用Linux/Unix系统上熟悉的curl工具,而是触发Invoke-WebRequest命令的别名。两者的参数体系完全不同,导致-I(查看HTTP头)等标准curl参数无法识别。

命令形式实际调用对象是否支持-I参数输出格式
curl -I URLInvoke-WebRequest不支持(报错)PowerShell对象表
curl.exe -I URLWindows原生curl程序支持原始HTTP响应文本
Invoke-WebRequestPowerShell原生命令使用-Method Head对象属性

二、检测301重定向的两种方法

方法1:使用curl.exe(推荐)

Windows 10/11已内置原生curl程序,只需添加.exe后缀即可绕过PowerShell别名:

curl.exe -I http://example.com

预期输出:

HTTP/1.1 301 Moved Permanently
Location: https://example.com/
Server: kangle/3.5

关键指标解读:

  • HTTP/1.1 301 Moved Permanently:确认服务器返回301永久重定向

  • Location:重定向目标地址

  • Server:Web服务器类型(此处为Kangle而非Apache)

方法2:使用PowerShell原生命令

如需在纯PowerShell环境中检测,使用以下命令:

(Invoke-WebRequest -Uri "http://example.com" -MaximumRedirection 0 -ErrorAction SilentlyContinue).StatusCode

返回结果:

  • 301:确认重定向配置成功

  • 若需查看完整响应头,使用.Headers属性替代.StatusCode


三、进阶检测:查看完整重定向链

如需追踪完整的重定向路径(包括多级跳转),执行以下步骤:

  1. 打开CMD或PowerShell

  2. 输入命令查看完整跳转链:

    curl.exe -IL http://example.com
  3. 分析输出中的每一行HTTP/Location:对应关系

输出示例解析:

HTTP/1.1 301 Moved Permanently    ← 第一跳:HTTP→HTTPS
Location: https://example.com/

HTTP/2 200                        ← 最终目标返回成功

四、常见问题排查

现象原因解决方案
返回307 Internal Redirect浏览器/HSTS缓存行为使用curl.exe绕过浏览器层
Invoke-WebRequest报错"远程服务器返回错误: (301)"未禁用自动重定向添加-MaximumRedirection 0参数
状态码显示为200而非301已跟随重定向到最终页面使用-MaximumRedirection 0阻止自动跳转
无法识别curl.exeWindows版本过旧升级至Windows 10 1803+或手动安装curl

五、验证清单

完成检测后,请确认以下要点:

  1. curl.exe -I返回首行包含301 Moved Permanently

  2. Location头指向正确的HTTPS目标地址

  3. 无多级重定向链(理想状态:HTTP→HTTPS仅一次跳转)

  4. 最终HTTPS页面返回200状态码


结论: 在Windows环境下检测301重定向时,优先使用curl.exe -I获取原始HTTP响应。该方法能准确显示服务器层面的重定向指令,排除浏览器内部机制干扰,是验证SSL和重定向配置是否正确的可靠方式。