我将 AWS S3 存储桶设置为网站。它对 DNS 使用 Route 53,对 SSL 证书使用 AWS Certificate Manager。公共站点是使用 HTTPS 的 S3 网站存储桶的 CloudFront 分配。分发设置为将 HTTP 重定向到 HTTPS。整个 AWS 配置是使用 AWS Java SDK v2 以编程方式设置的(尽管这与问题无关,因为我可以通过 AWS Web 控制台手动验证所有这些)。
我尝试了两种从foo.htmlto的重定向bar.html,都成功了:
- 使用路由规则重定向
<ReplaceKeyWith>bar.html</ReplaceKeyWith>,确保添加一个<HostName>(参见关于另一个 Stack Overflow 问题的更多讨论)。 - 使用重定向 S3 对象重定向,重定向位置设置为
/bar.html(因为对象重定向显然需要绝对路径)。
一切正常,除了一个奇怪之处:无论我使用哪种重定向方法,当我从foo.htmlto重定向时bar.html,即使从 HTTPS URL 开始,CloudFront 最初都会返回一个不安全的基于 HTTP 的间接 URL,然后重定向到 HTTPS URL,例如这:
https://example.com/foo.html重定向到http://example.com/bar.html重定向到https://example.com/bar.html
路由规则重定向和 S3 对象重定向都会发生这种情况。我在 Windows 10 上使用 Chrome 和 Firefox 中的网络开发人员工具对此进行了测试。
为什么 CloudFront 提供中间 HTTP 重定向?由于我的初始 URL 使用的是 HTTPS,为什么它不直接重定向到 HTTPS 表单?