如何使用 Route53 从一个顶级域重定向到另一个顶级域

How do you redirect from one toplevel domain to another using Route53

如果我的术语在这里不太正确,我们深表歉意

我的域 albunack.net 在 Route53 上运行良好。 我在 Route 53 控制下也有域 albunack.com

我希望对 albunack.com 的任何请求重定向到 albunack.net 并向用户显示他们在 albunack.net 而不是 albunack.com(通过网络浏览器地址)

我尝试创建一条 A 记录作为 albunack.com 的别名,并将别名目标设置为 albunack.net,但这没有用,它无法识别 albunack.net,我该怎么做?

I want any requests to albunack.com to redirect to albunack.net and also to show the user they are on albunack.net not albunack.com (via the webbrowser address)

这实际上是您需要从 Web 服务器而不是通过 DNS 执行的操作。其实 DNS 也切线参与。

您需要做的第一件事是将两个域解析为相同的 IP 地址。这可以通过按照您描述的方式为两个域创建 A 记录,或者将一个记录设置为另一个记录来完成。但无论您采用何种方法,DNS 所做的只是将 albunack.net 之类的域解析为 IP 地址。 DNS 不提供 Web 浏览器切换到不同域的机制。

您的 Web 服务器需要识别 albunack.com 的请求并将其重定向到 albunack.net。具体如何执行此操作将取决于您使用的网络浏览器。我熟悉 Apache,所以这里有一个使用虚拟主机定义的简单方法:

<VirtualHost *:80>
    ServerName albunack.com
    RedirectPermanent / http://albunack.net/
</VirtualHost>

您会发现 Web 浏览器中的重定向在 Whosebug 和 serverfault 上已经 discussed/answered 相当多,所以如果您需要更多帮助来设置您正在使用的任何 Web 服务器中的重定向,那么我' d 从搜索现有答案开始。

您可以通过使用 S3 存储桶重定向到 albunack.net 来执行此操作。首先,您需要创建一个 S3 存储桶并将 albunack.com 指向它。

  1. 创建名为 albunack.com 的 S3 存储桶(名称很重要,必须与域名匹配)。
  2. 将存储桶配置为充当静态网站。在存储桶属性中执行此操作。转到静态网站托管和select 将所有请求重定向到另一个主机名
  3. 输入 http://albunack.net 作为您要将所有请求转发到的地址。
  4. 走 Route 53 并将 albunack.com 指向 S3 存储桶。您可以通过为 S3 存储桶创建别名记录来做到这一点。

现在,当用户转到 albunack.com 时,请求将转到 S3 存储桶,该存储桶将响应重定向到 albunack.net。您可以在 AWS 博客 Root Domain Website Hosting for Amazon S3 中查看此技术的描述。

没有必要使用 s3 存储桶将域重定向或转发到另一个域。对我来说最简单的解决方案是在侦听器端口 443 和端口 80

上制定规则

IF Host is example.com THEN Redirect to https://www.yourdomain.com:443/#{path}?#{query} Status code:HTTP_301

和 *.example.com 相同的规则

考虑到您的 Route 53 服务中的所有域都需要相同 ssl 证书。

Listener Rules for Your Application Load Balancer

所谓的 zone apex 无法使用 CNAME 记录。 [1][2]
我发现用别名记录不可能实现这一点。 [3]

但是,如果不涉及 SSL,可以使用 HTTP 代码 301 实现区域顶点重定向的技巧。 [4]

AWS 官员在论坛帖子中解释了为什么无法重定向区域顶点:[5]

We do not currently support a way to point what is sometimes called the "zone apex" to another DNS name. For example, it is easy to set www.example.com to be a CNAME to srv123.ec2.amazonaws.com. Unfortunately, the rules of DNS forbid CNAMEs at the zone apex, so you cannot set example.com to also be a CNAME for srv123.ec2.amazonaws.com.

他们提出了以下两种解决方法:

There are two main ways to accomplish the goal of letting people visit your website via example.com. Some sites use an HTTP "rewrite" service that simply issues an HTTP redirect from example.com to www.example.com. We do not offer this service as part of Route 53, but it is something you can setup on your own using EC2.

The other option is to have example.com point to the IP addresses of the destination by configuring one or more "A" records (address records) for example.com. You can do that if you know the destination IP addresses are fixed, such as if you are using EC2 Elastic IP addresses. In the case of variable destinations like a CloudFront distribution, the destination IP addresses change all the time so you can't statically configure an A record.

参考资料

[1] https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html#CNAMEFormat
[2] https://forums.aws.amazon.com/thread.jspa?threadID=95588
[3] https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html
[4] https://aws.amazon.com/premiumsupport/knowledge-center/redirect-domain-route-53/
[5] https://forums.aws.amazon.com/thread.jspa?threadID=55995