TrueURL
TrueURL

菜单

免费重定向工具

HTTPS 重定向检测

输入域名,测试访问它的 4 种方式:http 和 https,各自带 www 和不带 www。每一种都应该只经过一次永久重定向,就到达同一个 HTTPS 地址。

HTTPS 检测会测试什么

TrueURL 会根据输入的主机名构建 4 个起始 URL,并逐一追踪:

  • http://example.com
  • http://www.example.com
  • https://example.com
  • https://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,或者根本没有该响应头,都会显示为警告。

常见的 HTTPS 重定向问题及修复方法

  • HTTP 没有重定向:http:// 版本直接显示页面,而没有进行重定向。请添加全站范围的 HTTPS 重定向;仅靠 canonical 标签无法保护访问者。
  • 两跳或更多:例如从 http://example.com 到 https://example.com,再到 https://www.example.com。请合并协议和主机名规则,让每个版本都直接重定向到最终 URL(但请注意下文的 HSTS 预加载例外情况)。
  • 临时重定向:从 HTTP 到 HTTPS 使用了 302 或 307。请改用 301 或 308,让搜索引擎只将 HTTPS 版本编入索引。
  • HTTPS 降级:某一跳从 https:// 回到了 http://,通常是多余的规则所致,或者是位于代理或 CDN 之后的应用程序用错误的协议生成了绝对 URL。
  • 证书错误:某个版本(通常是 www)不在证书的覆盖范围内。Cloudflare 边缘网络始终会验证证书,因此该版本会显示 TLS 错误,而不是重定向。
  • 各版本结果不一致:www 和不带 www 的版本停在不同的 URL 上,导致信号分散到两个主机名上。

HSTS 与预加载例外

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 重定向响应本身也必须发送该响应头。

切换到 HTTPS 之后

  • 将内部链接、canonical 标签、hreflang 注释和站点地图都更新为 HTTPS URL,避免爬虫反复遇到重定向。
  • 永久保留 HTTP 到 HTTPS 的重定向;旧链接在多年之后仍会指向 http://。
  • 确保网站的 HTTPS 版本已在 Google Search Console 中完成验证,并提交更新后的站点地图。
  • 每次更改 CDN、主机托管或证书之后,都要重新检测。

相关指南

常见问题

如何检测 HTTP 是否跳转到了 HTTPS?

在上方输入域名。TrueURL 会请求带 www 和不带 www 的 http:// 及 https:// 版本,并显示每个版本最终到达哪里、使用了哪些状态码以及经过了几跳。如果 4 个版本都到达同一个 HTTPS URL,并且每次重定向都是永久重定向,就说明配置正确。

应该使用带 www 还是不带 www 的域名?

对 SEO 来说两者都可以。关键是选定其中一个,用 301 把另一个重定向过来,并在链接、canonical 标签和站点地图中始终使用它。带 www 的主机名可能更容易指向 CDN,因为 DNS 不允许在根域名上设置 CNAME 记录(部分 DNS 服务商提供了变通方案),但这只是技术上的选择,并不是排名因素。

为什么 Chrome 开发者工具中 HTTP 到 HTTPS 显示的是 307?

这个“307 Internal Redirect”是 Chrome 自己生成的,因为该网站已在它的 HSTS 列表中,所以根本没有通过 HTTP 发送任何请求。服务器实际返回的重定向可能是 301,也可能完全是别的情况。TrueURL 没有 HSTS 缓存,因此始终显示服务器的真实响应。

HTTP 到 HTTPS 使用 302 跳转有问题吗?

有一点小问题。访问者最终仍会到达 HTTPS,但临时重定向会告诉搜索引擎 HTTP URL 可能还会恢复,这可能会拖慢切换过程或造成混乱。请改为 301 或 308。

如何确认网站是否发送了 HSTS?

在上方输入域名,然后在结果中查看“HSTS 响应头”一项。TrueURL 会从最终的 HTTPS 响应中读取 Strict-Transport-Security 响应头,显示其值、max-age(不足 1 年时会给出警告),以及是否设置了 includeSubDomains 和 preload。如果没有该响应头,每次从手动输入的域名或旧的 http:// 链接开始的访问,都会先发出一个未加密的请求,同一网络中的其他人可能会截获它。有了它,见过该响应头的浏览器下次会直接使用 HTTPS。建议先从较短的 max-age 开始,确认每个子域名都能通过 HTTPS 正常访问后再添加 includeSubDomains,然后把 max-age 提高到 1 年或更长。

可以检测证书无效或已过期的网站吗?

可以看到问题所在,但无法越过它继续检测。在 Cloudflare 边缘网络上,即使开启了“忽略 SSL 错误”,也无法关闭证书验证,因此受影响的版本会在该跳显示 TLS 错误。通常这正是需要了解的信息:浏览器在那里同样会向访问者显示警告。

需要重定向每个页面,还是只重定向首页?

每个 URL 都需要。全站规则应把 http://example.com/any/path?query 重定向到 HTTPS 上相同的路径和查询参数。可以用重定向链检测测试几个深层 URL,或者用批量重定向检测一次检测多个 URL。