Cloudfront 使用 SSL 将 www 重定向到裸域

Cloudfront redirect www to naked domain with ssl

如果之前有人问过这个问题,请原谅我,有很多资源都涉及到这个问题,但似乎没有什么适合我的特定 (https) 用例。

我正在尝试重定向 https://www.example.com to https://example.com. Likewise, this should work for http://www.example.com to https://example.com

我已经设置了一个基于 s3 存储桶的云前端分发,将 http 重定向到 https,添加了 cname example.com 并添加了我的域证书(适用于 www 子域以及 naked域)。

我还设置了一个单独的分发版,使用 www.example.com 的 cname,添加了证书并将源设置为单独的 s3 存储桶,在(静态网站托管)中将所有请求重定向到 https://example.com.

http://example.comhttps://example.com 的重定向按预期工作,但是 http(s)://www.example.com 到 https://example.com 没有。

在 route 53 中,我将根域别名为第一个云端分布,将 www 别名为第二个。

由于这个答案,我找到了解决方案:Amazon S3 Redirect and Cloudfront

简而言之:

如果源只是存储桶 ID,Cloudfront 不遵守 S3 中的重定向规则设置。相反,我必须将原点设置为提供的 s3 静态网站主机名。

在 AWS 上托管网站,以便:

https://www.example.com、http://www.example.com 和 http://example.com 全部重定向到 https:/ /example.com

你需要:

  1. 创建两个名为:example.comwww.example.com.[= 的 S3 存储桶10=]

  2. 在这两个存储桶上打开静态网站托管

  3. 在存储桶 www.example.com 中配置重定向到:https://example.com . 在存储桶属性中选择 静态网站托管 => 将所有请求重定向到另一个主机名。在 Target bucket or domain 字段中,输入 example.com,在 Protocol 字段中,输入 https

  4. 为这些存储桶创建两个 CloudFront 分配。每个分布都指向相应的桶:

  5. 对于原始域名,提供静态网站托管部分中提供的存储桶URL。网址应具有以下形式(或类似形式):example.com.s3-website-us-west-1.amazonaws.com

    • 在两个发行版中设置 HTTP 到 HTTPS 重定向。

    • 请勿使用亚马逊自动完成建议的URL!

    • 不要设置 默认根对象 属性!

  6. 通过为 www.example.com 和 example.com 设置 A 记录以指向相应的 CloudFront 分配来配置 DNS。

为什么有效? CloudFront 在两种情况下(使用和不使用 www)都提供从 HTTP 到 HTTPS 的重定向。 www.example.com 的存储桶提供指向 example.com 的重定向。如果您没有此分发版,则存储桶将无法重定向对 https://www.example.com 的请求。 S3本身不支持静态网站托管的HTTPS。