如何在Route53中将www重定向到非www?

我将我的网站托管在 domain.com 上。 我的 Route53 中的 DNS 记录如下:
domain.com      A       xxx.xxx.xxx.xxx      300
domain.com      NS      stuff.awsdns-47.org  172800
domain.com      SOA     stuff.awsdns-47.org  900

我想将来自 www.domain.com 的流量重定向到 domain.com,因为目前它只返回一个 404 错误。SO 上的这个问题 提出了添加一个 PTR 记录的建议,我已经添加了:

www.domain.com  PTR     domain.com           300
但是它没有起作用。我应该做什么?

4如果你真的想发送一个HTTP重定向,DNS无法实现。如果你不介意地址栏中的URL改变,可以像pauska建议的那样使用CNAME。如果你在意URL的改变,你将需要一个Web服务器来发送301重定向。一些DNS提供商提供这项服务,但我不相信Route53会提供此功能。 - cjc
@cjc 我不在意地址栏中的URL。 - fredley
对于使用Cloudflare的其他读者,这个方法对我有效:https://community.cloudflare.com/t/redirecting-www-to-non-www/2949/28 - Venryx
7个回答

PTR用于设置反向IP查找,这不是你需要关心的事情。请将其删除。 你需要的是一个针对www的CNAME记录。
www.domain.com  CNAME  domain.com 300

21这不是一个重定向。如果你需要在某种第三方服务中定义回调URL,上述解决方案将无法工作。例如oAuth(Facebook、Twitter)身份验证。 - Ck-
2不行,不起作用 - Madeo
CNAME意味着您在www和Apex上有重复内容,这对于Google/SEO来说并不理想,并且会受到惩罚(在SEO术语中,是因为重复内容)。 - Mathias Conradt
@MathiasConradt ..那你有什么推荐呢? - user1388835
@user1388835 根据原问题的第一条评论或者这里的第一条评论所提到的,进行真正的重定向。 - Mathias Conradt

你还可以为WWW设置一个别名,指向domain.com的A记录。
www.domain.com A ALIAS domain.com 300
所以您的最终DNS条目将如下所示:
domain.com          A       xxx.xxx.xxx.xxx      300
domain.com          NS      stuff.awsdns-47.org  172800
domain.com          SOA     stuff.awsdns-47.org  900
www.domain.com      A       ALIAS domain.com (Hosted Zone ID)

我已经做了这个,但还是不起作用。还需要做其他的事情吗? - Utpal - Ur Best Pal
添加别名后,我需要删除浏览器缓存才能使其正常工作。 - trees_are_great
这取决于您的DNS之前的TTL。 - Hardeep Singh

我通过利用一个额外的S3存储桶来完成了这个设置。 我希望我的网站可以在非www的example.com上访问。在我的情况下,example.com已经设置了一个Route 53托管区域、一个S3存储桶和一个带有自定义SSL证书的CloudFront分发。 我希望www.example.com重定向到example.com。为此,我为www.example.com设置了一个新的S3存储桶。我将其设置为公开,并设置了静态网站托管以重定向所有请求。目标存储桶或域名是example.com。由于我已经在example.com上配置了SSL证书,所以我将协议设置为https。

enter image description here

在 Route 53 中,mydomain.com 托管区域内,我创建了一个新的 A 记录,用一个指向新的 www s3 存储桶网站的别名指向 www.example.com。 现在所有对 www.example.com 的请求都会重定向到 https://example.com。 希望这可以帮到你。

这正是我正在寻找的。谢谢! - Tuxedo Joe
2这个解决方案对于HTTP是可以的,但对于HTTPS请求不起作用。您需要使用CloudFront来提供HTTPS服务。请参阅https://serverfault.com/a/942537/7005。 - myroslav
确实,通过这种方法,您只能将重定向指向https,而不能从https进行重定向。您需要通过CloudFront执行额外的步骤,就像上面链接的评论中所述。 - hansaplast

在你为example.com和www.example.com都设置了CNAME之后,这个nginx配置将会将所有的http流量重定向到https,并且将所有的www.example.com重定向到example.com。
server { 

    listen  80 ;

    server_name  example.com, www.example.com;

    rewrite ^/(.*) https://example.com/$1 permanent;
}

server {  #  redirect www to normal domain

    listen       443  ssl ;

    server_name www.example.com;

    include /etc/nginx/myprojname/include/ssl;

    return 301 https://example.com$request_uri;
}

server {

    listen  443 ssl ;

    include /etc/nginx/myprojname/include/ssl;

    server_name example.com;

    include /etc/nginx/snippets/nginx_common_location_443;

    location / {

        proxy_pass http://127.0.0.1:3000/;
    }

    include /etc/nginx/myprojname/include/custom_server_include;
}
我的实际服务器正在端口3000上运行和监听...这也终止了我的TLS,只是忽略SSL的提及...那些包含的文件中隐藏了我加固服务器的Nginx设置。

如上所述,使用标准DNS是不可能实现的。 这是我使用的解决方案: 1. 配置S3并将其设置为静态网站重定向到您的非www域名。 2. 创建一个CloudFront分发到您的S3(使用S3域名,而不是AWS自动完成建议的域名)。 3. 在Route 53中添加一个A记录别名指向CloudFront分发。

@Thomas 请查看修改后的答案。 - natanavra
“不使用自动完成”是指您需要复制静态网站的URL,并将其粘贴到CloudFront的源对话框中。例如,www.example.com.s3-website.eu-central-1.amazonaws.com。 - hansaplast
对我来说没用 - Bersan

在翻看了许多在线教程之后,我发现只需要使用Route53服务就能轻松完成,不需要任何其他的服务。 以下是该域名配置的示例,包括www子域名:

enter image description here

这是一个没有www的同一域名的示例配置。

enter image description here

所以基本上你需要从www.domain.com复制相同的配置,包括IP地址,再粘贴到domain.com。 然后,等待一段时间让你的域名更改传播,你就能够在带有和不带有www的域名中看到你的网站加载了。

1这不是OP所要求的,他希望实现一个“重定向”,而这并不是。 - Automatico

这取决于您如何提供网站服务。 最简单的方法可能是通过CloudFront进行服务。这样,您只需创建CloudFront分发,并将www和非www域名都添加为别名。CloudFront会处理这两个域名。

在CloudFront中,如何将"www"和非"www"域名都添加为别名?这就是问题所在。 - Bersan

  • 相关问题