使用S3 / CloudFront将www重定向到非www,而不使用单独的存储桶

时间:2017-04-15 14:07:11

标签: amazon-web-services redirect amazon-s3 amazon-cloudfront no-www

我使用CloudFront在S3上托管静态网站。

现在,www.example.comexample.com都返回相同的内容,但我只希望example.com能够正常工作,而www.example.com则需要重定向到example.com

我知道我可以创建另一个将重定向到主存储桶(example.com)的存储桶,但是我会为每个网站提供两个存储桶和两个CloudFront分配,并且它会使一团糟。

还有另一种方法可以实现吗?

2 个答案:

答案 0 :(得分:2)

您提到example.com时似乎正在使用DNS服务 但是,我不知道你在做什么DNS服务 由于路线53是常用的,因此在路线53的基础上进行描述 域名在example.com的基础上描述。

您可以通过编程方式将example.com的重定向编码到www.example.com 但是,通常在AWS级别解决此问题。

需要两个存储桶才能在AWS级别解析。

  1. example.com(内容桶)

  2. www.example.com(重定向到example.com的存储桶)
    S3 - >属性 - >静态网站托管 - >重定向请求
    目标存储桶或域:example.com
    协议:http
    (水桶不需要任何文件。)

  3. 将example.com映射到Route 53上的A记录。

  4. 将www.example.com映射到Route 53的A记录。
  5. 然后,如果您要求www.example.com,您将被重定向到example.com。

    如果您有任何疑问,请随时提出! 谢谢。

    更新1
    如果您为example.com和www.example.com激活CloudFront CNAME,则 您只需一个桶即可获得example.com和www.example.com请求 但是,建议不要这样做,因为网址的一致性不好。

答案 1 :(得分:0)

最近 AWS 推出了 Cloudfront 功能。您可以猜到它允许您使用自定义函数代码在云端操作 http 请求/响应。

在他们的介绍性博客中,他们介绍了这个特定的重定向用例。根据他们的博客 Introducing CloudFront Functions – Run Your Code at the Edge with Low Latency at Any Scale:-

<块引用>

URL 重写和重定向:生成响应以将请求重定向到不同的 URL。例如,将未经身份验证的用户从受限页面重定向到登录表单。 URL 重写也可用于 A/B 测试。

我已经尝试过这种方法。我做了什么:-

  1. 设置新的 Cloudfront 分发版。
  2. 将此分布映射到现有网站存储桶(无关紧要)
  3. 将新的 redirect_www_to_naked function 与此分发相关联。
  4. 将此分布映射到 www 中的 Route 53 子域

这就是我的函数的样子:-

enter image description here

这是我的关联设置 enter image description here