【问题标题】:How do you redirect from one toplevel domain to another using Route53如何使用 Route53 从一个顶级域重定向到另一个域
【发布时间】:2015-04-16 08:52:19
【问题描述】:

抱歉,如果我的术语在这里不太正确

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-route53


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢确实有效(它适用于 www.albunack.net -> albunack.net,目前 albunack.com 的名称服务器似乎存在一些问题)
    • 我们是否需要将构建文件放入 s3 存储桶中?还是只是这里使用的名称? @PaulTaylor
    【解决方案2】:

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

    如果主机是 example.com THEN 重定向到 https://www.yourdomain.com:443/#{path}?#{query} 状态码:HTTP_301

    对于 *.example.com 也是一样的规则

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

    Listener Rules for Your Application Load Balancer

    【讨论】:

      【解决方案3】:

      对于所谓的区域顶点,无法使用 CNAME 记录。 [1][2]
      我发现使用别名记录也不可能实现这一点。 [3]

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

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

      我们目前不支持将有时称为“区域顶点”的内容指向另一个 DNS 名称的方法。例如,很容易将 www.example.com 设置为 srv123.ec2.amazonaws.com 的 CNAME。不幸的是,DNS 规则禁止在区域顶点使用 CNAME,因此您不能将 example.com 设置为 srv123.ec2.amazonaws.com 的 CNAME。

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

      有两种主要方法可以实现让人们通过 example.com 访问您的网站的目标。一些站点使用 HTTP“重写”服务,它只是发出从 example.com 到 www.example.com 的 HTTP 重定向。我们不将此服务作为 Route 53 的一部分提供,但您可以使用 EC2 自行设置。

      另一种选择是通过为 example.com 配置一个或多个“A”记录(地址记录),让 example.com 指向目标的 IP 地址。如果您知道目标 IP 地址是固定的,例如您使用的是 EC2 弹性 IP 地址,则可以这样做。在 CloudFront 分配等可变目标的情况下,目标 IP 地址一直在变化,因此您无法静态配置 A 记录。

      参考文献

      [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

      【讨论】:

        【解决方案4】:

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

        这实际上是您需要从 Web 服务器执行的操作,而不是通过 DNS。实际上,DNS 也与此相关。

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

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

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

        您会发现 web 浏览器中的重定向已经在 stackoverflow 和 serverfault 上讨论/回答了很多,所以如果您需要更多帮助来设置您正在使用的任何 web 服务器中的重定向,那么我会先搜索现有答案。

        【讨论】:

        • 这是否假定 albunack.com 指向一个网络服务器,我可以在其中设置这个虚拟主机,但它目前没有指向任何东西。在 Route53 域中创建 A Alias 记录允许 www.albunack.net 转到 albunack.net 但我的观点是我似乎无法为 albunack.com 创建 A ALIAS 记录以指向 albunack.net,abunack.net 运行使用 Elastic beanstalk 的服务,所以我假设 ip 地址不固定,并且您也不允许为 apex 域(例如 albunack.com)创建 CNAME 记录
        • 您最初没有提到这是使用 Elastic Beanstalk。但这并没有真正改变基本问题。 DNS 仅将人类可读的域名转换为 IP 地址。根据需要,要将 Web 用户从一个人类可读域重定向到另一个域,需要 HTTP redirect,这必须从 Web 服务器完成,而不能通过 DNS 完成。您的应用程序可以自己执行301 redirect,或者您需要在某处为您执行此操作的 Web 服务器。两个域都指向 Beanstalk。
        猜你喜欢
        • 2019-11-25
        • 2021-10-15
        • 2010-10-14
        • 2018-01-11
        • 2013-05-18
        • 2015-08-20
        • 2012-06-10
        • 2014-08-28
        • 2019-07-07
        相关资源
        最近更新 更多