【问题标题】:Redirect www subdomain to an apex (naked) domain on Route 53 (not using S3)?将 www 子域重定向到 Route 53 上的顶点(裸)域(不使用 S3)?
【发布时间】:2017-11-16 09:44:16
【问题描述】:

如何使用 Route53 和 CloudFront 将 www 子域重定向到顶级(裸)域?

请注意我没有使用 S3。 我的网站托管在 AWS ECS 服务上的 ELB 后面。

我尝试使用以下设置创建记录集:

- Name: www 
- Type: CNAME - Canonical name
- Alias: No
- TTL (Seconds): 300
- Value: example.com

在 CloudFront 中,我只将 example.com 顶点列入白名单。结果,请求被阻止。

我也尝试在 CloudFront 中添加 www.example.com 条目并且站点解析,但是浏览器未重定向 example.com

【问题讨论】:

  • 使用 mod_rewrite 怎么样(如果你使用的是 apache)?
  • 感谢@TitiWangsabinDamhore 非常感谢您的评论。如果可能,尝试在 Route53 中执行此操作,但后备是 Nginx。
  • 据我所知,仅 53 号公路,无法做到这一点。路由53的工作是将域名转换为IP。 HTTP 1.1 允许一个 IP 拥有多个域。客户端请求 www.abc.com,请求 abc.com 的唯一方法是如果有 30x 响应。这不是由 r53 处理的。

标签: amazon-web-services routing amazon-cloudfront amazon-route53


【解决方案1】:

AWS 引入了CloudFront functions,它可以操纵流经 CloudFront 的请求和响应。

要将 www 子域重定向到顶点域,您可以使用以下查看器请求函数:

function handler(event) {
  var request = event.request;

  var headers = request.headers;
  var host = request.headers.host.value;

  if (host.startsWith('www')) {
    var response = {
      statusCode: 301,
      statusDescription: 'Moved Permanently',
      headers: {
        location: {
          value: 'https://' + host.replace('www.', ''),
        },
      },
    };

    return response;
  }

  return request;
}

为了使此功能正常工作,CloudFront 分配需要同时配置 www 子域和 apex 域。您还需要为 Route 53 配置子域和顶点域。

对于整个 gTLD 已包含在 HSTS 预加载列表中的域(例如 .dev),由于 S3 网站不支持 https,因此无法使用 S3 进行重定向。

【讨论】:

    【解决方案2】:

    如果您正在考虑使用 CloudFront 和 Route53 进行重定向,目前您必须为 HTTP Response Generation 编写 Edge Lambda 以进行重定向。

    【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2017-08-31
    • 2021-02-26
    • 2016-09-14
    • 1970-01-01
    • 2017-06-02
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多