阅读约 12 分钟
如何检测 URL 重定向(网址跳转)并读懂重定向链
用 TrueURL、curl 和浏览器开发者工具(DevTools)逐步检测 URL 重定向,读懂重定向链的每一跳,并修复重定向循环、过长的重定向链以及 301 与 302 混用等问题。
阅读全文免费重定向工具
输入域名,测试访问它的 4 种方式:http 和 https,各自带 www 和不带 www。每一种都应该只经过一次永久重定向,就到达同一个 HTTPS 地址。
按 Enter 开始检测
Cloudflare 边缘网络始终会验证证书,因此该选项无法跳过证书验证。证书问题会在检测结果中报告。
随第一个请求发送,最大 16 KB。除非设置了 Content-Type 请求头,否则 JSON 请求体以 application/json 发送,其他内容以表单形式发送。
可设为 1~50。浏览器会在 20 跳后停止。
网站可能会把手机、搜索引擎爬虫和链接预览爬虫重定向到不同的地址。
随重定向链中的每个请求一起发送。
未添加自定义请求头。
填写值后才会发送此请求头。请求头的值不会保存。
跟踪 HTML 页面中的 <meta http-equiv="refresh"> 标签和 Refresh 响应头。
跟踪页面脚本中简单、无条件的重定向,例如 location.href = "…"。
设置会保存在此浏览器中,但 Cookie、请求头的值和 POST 请求体始终不会保存。
TrueURL 会根据输入的主机名构建 4 个起始 URL,并逐一追踪:
http://example.comhttp://www.example.comhttps://example.comhttps://www.example.com在配置正确的情况下,这 4 个 URL 都会停在同一个规范 HTTPS URL 上。该版本直接返回 200 OK,其余 3 个版本则通过一次 301 或 308 到达它。任何从 HTTPS 回到 HTTP 的跳都会被标出。
TrueURL 还会检查 HSTS:从最终的 HTTPS 响应(通常就是规范 URL)中读取 Strict-Transport-Security 响应头,显示其原始值、max-age,以及是否设置了 includeSubDomains 和 preload。max-age 不少于 1 年即为通过。max-age 较短、max-age=0、响应头中没有有效的 max-age,或者根本没有该响应头,都会显示为警告。
http://example.com 到 https://example.com,再到 https://www.example.com。请合并协议和主机名规则,让每个版本都直接重定向到最终 URL(但请注意下文的 HSTS 预加载例外情况)。www)不在证书的覆盖范围内。Cloudflare 边缘网络始终会验证证书,因此该版本会显示 TLS 错误,而不是重定向。www 和不带 www 的版本停在不同的 URL 上,导致信号分散到两个主机名上。HSTS(HTTP 严格传输安全)会告诉浏览器自动通过 HTTPS 访问您的域名,而不必先请求 HTTP。典型的响应头是 Strict-Transport-Security: max-age=31536000; includeSubDomains。浏览器只接受 HTTPS 响应中的该响应头,在普通 HTTP 响应中会忽略它。
如果想把域名加入浏览器的 HSTS 预加载列表(hstspreload.org),HTTP 的第一跳必须留在同一主机名上:先从 http://example.com 到 https://example.com,然后才到 https://www.example.com。这种两跳的链是“只用一跳”原则公认的例外。此外,该响应头的 max-age 至少要设为一年,还要包含 includeSubDomains 和 preload,而且 HTTPS 重定向响应本身也必须发送该响应头。
阅读约 12 分钟
用 TrueURL、curl 和浏览器开发者工具(DevTools)逐步检测 URL 重定向,读懂重定向链的每一跳,并修复重定向循环、过长的重定向链以及 301 与 302 混用等问题。
阅读全文阅读约 13 分钟
详解每个 3xx 状态码的含义:从是否永久、是否保留请求方法、缓存和 SEO 影响 4 个方面对比 301、302、303、307 和 308 跳转,并附 nginx、Apache 和 PHP 配置示例。
阅读全文在上方输入域名。TrueURL 会请求带 www 和不带 www 的 http:// 及 https:// 版本,并显示每个版本最终到达哪里、使用了哪些状态码以及经过了几跳。如果 4 个版本都到达同一个 HTTPS URL,并且每次重定向都是永久重定向,就说明配置正确。
对 SEO 来说两者都可以。关键是选定其中一个,用 301 把另一个重定向过来,并在链接、canonical 标签和站点地图中始终使用它。带 www 的主机名可能更容易指向 CDN,因为 DNS 不允许在根域名上设置 CNAME 记录(部分 DNS 服务商提供了变通方案),但这只是技术上的选择,并不是排名因素。
这个“307 Internal Redirect”是 Chrome 自己生成的,因为该网站已在它的 HSTS 列表中,所以根本没有通过 HTTP 发送任何请求。服务器实际返回的重定向可能是 301,也可能完全是别的情况。TrueURL 没有 HSTS 缓存,因此始终显示服务器的真实响应。
有一点小问题。访问者最终仍会到达 HTTPS,但临时重定向会告诉搜索引擎 HTTP URL 可能还会恢复,这可能会拖慢切换过程或造成混乱。请改为 301 或 308。
在上方输入域名,然后在结果中查看“HSTS 响应头”一项。TrueURL 会从最终的 HTTPS 响应中读取 Strict-Transport-Security 响应头,显示其值、max-age(不足 1 年时会给出警告),以及是否设置了 includeSubDomains 和 preload。如果没有该响应头,每次从手动输入的域名或旧的 http:// 链接开始的访问,都会先发出一个未加密的请求,同一网络中的其他人可能会截获它。有了它,见过该响应头的浏览器下次会直接使用 HTTPS。建议先从较短的 max-age 开始,确认每个子域名都能通过 HTTPS 正常访问后再添加 includeSubDomains,然后把 max-age 提高到 1 年或更长。
可以看到问题所在,但无法越过它继续检测。在 Cloudflare 边缘网络上,即使开启了“忽略 SSL 错误”,也无法关闭证书验证,因此受影响的版本会在该跳显示 TLS 错误。通常这正是需要了解的信息:浏览器在那里同样会向访问者显示警告。