Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect Cloudfront使用ssl将www重定向到裸域_Redirect_Ssl_Amazon S3_Amazon Cloudfront_Amazon Route53 - Fatal编程技术网

Redirect Cloudfront使用ssl将www重定向到裸域

Redirect Cloudfront使用ssl将www重定向到裸域,redirect,ssl,amazon-s3,amazon-cloudfront,amazon-route53,Redirect,Ssl,Amazon S3,Amazon Cloudfront,Amazon Route53,如果之前有人问过这个问题,请原谅,有很多参考资料都涉及到这一点,但似乎没有任何内容适合我的特定(https)用例 我正在尝试重定向到。同样,这也应该适用于to 我已经使用s3 bucket的来源建立了cloudfront发行版,将http重定向到https,添加了cname example.com并添加了我的域证书(它适用于www子域和裸域) 我还为www.example.com设置了一个单独的分发版,其中包含一个cname,添加了证书,并将源代码设置为一个单独的s3 bucket,该bucke

如果之前有人问过这个问题,请原谅,有很多参考资料都涉及到这一点,但似乎没有任何内容适合我的特定(https)用例

我正在尝试重定向到。同样,这也应该适用于to

我已经使用s3 bucket的来源建立了cloudfront发行版,将http重定向到https,添加了cname example.com并添加了我的域证书(它适用于www子域和裸域)

我还为www.example.com设置了一个单独的分发版,其中包含一个cname,添加了证书,并将源代码设置为一个单独的s3 bucket,该bucket在(静态网站托管)中将所有请求重定向到

重定向按预期对to起作用,但http(s)://www.example.com to不起作用


在route 53中,我将根域别名为第一个cloudfront分发,将www别名为第二个

多亏了这个答案,我找到了解决方案:

简言之:


Cloudfront不遵守S3中设置的重定向规则(如果源代码只是bucket ID)。相反,我必须将源代码设置为提供的S3静态网站主机名。

在AWS上托管网站,以便:

https://www.example.com, http://www.example.com 及http://example.com 全部重定向到https://example.com

您需要:

  • 创建两个名为:example.comwww.example.com的S3存储桶

  • 在这两个bucket上打开静态网站宿主

  • 在bucketwww.example.com中配置重定向到:https://example.com。 在bucket属性中,选择Static Website Hosting=>将所有请求重定向到另一个主机名。在目标bucket或域字段中,输入example.com,在协议字段中,输入https

  • 对于这些bucket,创建两个CloudFront分布。每个分布都指向相应的桶:

  • 对于源域名,请提供静态网站托管部分提供的bucket URL。URL的格式应为(或类似):example.com.s3-website-us-west-1.amazonaws.com

    • 在两个分发服务器上,将HTTP设置为HTTPS重定向

    • 不要使用亚马逊自动完成推荐的URL

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

  • 通过将www.example.com和example.com的记录设置为指向相应的CloudFront发行版来配置DNS


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

    非常感谢您发布您的答案。我用它将HTTPS重定向从裸域转到www,例如->。此解决方案是违反直觉的,因为AWS UI自动完成标准S3主机名(bucketname.S3.amazonaws.com),您认为这是正确的方法,但对于此用例,静态网站托管端点(例如bucketname.S3-website-us-east-1.amazonaws.com)这是您所需要的。CloudFront发行版不将任何内容设置为默认根对象也很重要,因为它将中断S3存储桶中的重定向。您的链接指向一个问题。你打算链接那个问题的哪个答案?@kellen,你是如何将apex转发到www的?这就是我试图为我的HTTPS域所做的。我的规范URL包括www.@Costa,请查看此答案中的说明。只需反转域,因为您需要apex->www。重要的是使用静态网站托管部分下bucket中提供的URL作为CloudFront目标,而不是自动完成URL。请看我在这里的答案,这应该是非常有帮助的:我们可以把它移到服务器故障,而不是关闭这个问题吗?我想为@jtheletter的提案添加一个答案。为了记录在案,我写了一篇关于如何使用S3、CloudFront和Route53建立静态网站的文章。它描述了用于正确处理www子域的基本AWS基础结构。请勿在www->裸体CF发行版上将HTTP设置为HTTPS重定向,以避免不必要的重定向。您希望直接转到not first。不要在53上为www设置A记录。请使用CNAME。对根域上的和AAAA记录使用别名。还值得注意的是,仅在www.example.com上使用CNAME指向example.com不会重定向。相反,www.example.com将显示与example.com相同的内容,但内容不同。因此,我的解决方案是将www.mydomain.com bucket重定向到domain.com,并将协议设置为https。在每个Cloudfronts(即www.mydomain.com和mydomain.com)中,我分别将CNAME设置为www.mydomain.com和mydomain.com。在S3中完成此操作后,我可以选择适当的Cloudfront作为记录的别名。如上所述,我没有使用autocomplete建议的URL—我使用的是静态网站主机名—也没有设置默认的根属性。为什么没有人解释您需要为每次重定向安装SSL证书,以防止浏览器发出“不安全”警告?这是最基本的,但像我这样“只是一个开发人员”的人不知道这一点。我花了好几天的时间试图解决这个问题,直到我发现这个建议。。。