Heroku/GoDaddy:如何将裸域名重定向到www?

146

我正在寻找如何将我的裸域名重定向到www域名的方法。我正在使用Heroku,并拥有来自GoDaddy的域名。由于Heroku,我的A记录已经设置为:

@: 75.101.145.87

@: 75.101.163.44

@: 174.129.25.170

而我的www CNAME指向proxy.heroku.com。

我已经在互联网上寻找了很久,但找不到一个简单、免费的答案来解决这个重定向问题。有些答案讨论使用付费服务,但我不想这样做,而其他人则谈论修改Heroku设置,但并没有给出详细解释。目前,如果您访问我的裸域名,只会看到Heroku说没有这样的应用程序;而如果您访问我的www域名,就可以看到我的应用程序。


8
Heroku 的常见问题解答只介绍了如何在 DNSimple 中进行重定向。他们的支持页面链接到 StackOverflow。 - Andrew Latham
32
我认为Emil的回复有点严厉,这个网站是一个解决我们在编程过程中遇到问题的资源,而我现在就遇到了这样一个问题!:D - Daniel Morris
这个问题可能应该被标记为重复而不是离题:https://dev59.com/92Qo5IYBdhLWcg3wfPQa - Chris Moschini
2
@ChrisMoschini,您提及的问题中被接受的答案在GoDaddy上并不起作用,因为GoDaddy仅支持CNAME记录而不支持ALIAS记录。这应该是一个独立的问题。 - Topher Hunt
1
无论 A 记录设置为什么,都不可能直接将裸域指向 Heroku。我们只能将其路由到 www,而 CNAME 则指向 your-app-name.herokuapp.com - eQ19
5个回答

235
在GoDaddy上,使用“转发”功能将yourdomain.example转发到www.yourdomain.example。 转发功能可以在域管理器中访问,在“域信息”部分的底部:

Domain forwarding in GoDaddy

如果您这样做,那么所有流向yourdomain.example的流量都将被路由到Heroku应用程序CNAME(这是更好的方法)。
但是请注意,如果您使用Cedar堆栈,则不要将proxy.heroku.com用作您的www CNAME的主机。而是使用your-app-name.herokuapp.com。这些细节在此处涵盖

GoDaddy还指定,为了使您的域名转发,其A记录必须指向64.202.189.170或必须落在以下范围内:50.63.202.1 - 50.63.202.31184.168.221.1 - 184.168.221.31


14
如果你在使用 SSL,Heroku 是否会产生警告或错误呢?他们说如果将 https:// example.com 重定向,就会出现警告。 - Jaqx
3
@jaqx,这件事正在发生在我身上,你找到了避免用户收到此警告的方法吗? - jackerman09
3
@jackerman09 我已经厌倦了繁琐的操作,转而使用DNSimple。 - Jaqx
5
@Matt,使用GoDaddy无法完成此操作。如果需要此功能,请使用DNSimple或DNS Made Easy等其他提供商的ALIAS/ANAME功能。 - Ryan Daigle
3
@RyanDaigle 谢谢,我建议每个人都离开 godaddy(一家网站托管服务商),理由不止一个,请看这篇文章:http://www.authormedia.com/6-reasons-authors-should-avoid-godaddy/。我现在使用 NameCheap.com,他们非常好,并且支持我的初衷。此外,NameCheap还接受比特币支付:https://www.namecheap.com/support/payment-options/bitcoin.aspx。 - Matt
显示剩余3条评论

22

你还可以使用http://wwwizer.com将你的裸域名重定向到带有www的域名。在GoDaddy的DNS管理器中,在A记录下,@标题中输入174.129.25.170,他们会自动将裸域名重定向到带有www的前缀的域名。


5
为什么要向别人支付额外的费用? - Benjamin
4
先生,您真是个救命恩人。@Vezu:非SSL转发完全免费。您只需将裸域的A记录指向该IP地址,它就会将浏览器重定向到www域。您甚至不需要一个账户。 - P O'Conbhui
我正在尝试将wwwizer集成到我的网站中,我的A记录中主机名为“@”,指向为174.129.25.170,按照wwwizer的说明进行设置。但是当我访问我的裸域时,却出现了他们的错误信息页面!我是否正确操作了? - tx291

8
在GoDaddy的DNS区域编辑器中,您需要将CNAME记录www配置为指向@。在A记录中,您将使用通配符(*)指向IP地址,并使用@作为主机的第二个A记录也将指向Web地址。这样做,您就可以通过www和非www访问您的网站。
subdomain1.example.com will forward to your IP
www.example.com will forward to your IP
silly.example.com will forward to your IP
anything.example.com will forward to your IP

常见问题

我能把*.mydomain.example指向我的Heroku应用吗?

可以,使用Heroku的免费自定义域名功能,您可以将通配符域名指向您的应用程序。

我应该使用哪些IP地址来将我的自定义域名指向Heroku?

Heroku路由堆栈使用一组IP地址,这些地址随时可能会更改,并且不支持使用A记录指向您的应用程序。为了确保您的域名始终正确地指向路由网格,请使用CNAME记录配置子域(例如,在www.example.org中使用的www):

If the app is on…   Then CNAME the subdomain to
Bamboo  yourapp.heroku.com
Cedar   yourapp.herokuapp.com

应避免使用裸域名(例如example.org),因为它们会影响可用性和正常运行。

为什么我不能为我的应用程序添加subdomain.mydomain.example

在某些情况下,尝试为应用程序添加自定义域名(如subdomain.mydomain.example)可能会导致出现错误,例如:

 ! mydomain.example is owned by another user

同一基本域名下的所有应用程序必须属于同一个Heroku帐户。上述错误意味着其他人已经将mydomain.example自定义域添加到他们的某个应用程序中。


1
Heroku的IP地址和Web地址是appname.heroku.com还是proxy.heroku.com? - Andrew Latham
1
你应该真正关注这篇文章,https://devcenter.heroku.com/articles/custom-domains,因为它涵盖了你想要做的一切。 - kobaltz
1
这种方法将CNAME“www”指向@,仍然通过固定IP地址路由流量(具有与A记录相同的所有缺点)。使用顶级重定向,GoDaddy称之为“转发”,而不是这种方法。 - Ryan Daigle

5
如果您已经在您的裸域名上设置了IP地址,并将您的www cname指向了yourappname.herokuapp.com,那么您所需要做的就是在您的应用程序中使用类似RackRewrite的东西来重定向请求到达您的应用程序时。您想要设置的是任何对裸域名的请求都被重定向到您的www地址。在遵循安装说明后,在config/initializers中添加一个初始化程序。
 ApplicationName::Application.config.middleware.insert_before(Rack::Lock, Rack
 r301 %r{.*}, 'http://www.yourdomain.example$&', :if => Proc.new {|rack_env
  rack_env['SERVER_NAME'] != 'www.yourdomain.example'
 }
 end if Rails.env == 'production'

这段话的意思是,如果请求的URL不是www.yourdomain.example,则将其301重定向到www.yuordomain.example,但仅在生产环境中运行时才这样做。

1
理想情况下,这应该在 DNS 级别完成,避免通过 Heroku 的固定 IP 地址进行访问。另外,不确定这是否是一个 Ruby 应用程序? - Ryan Daigle
Ryan,DNS 级别无法进行重定向。它们始终由 HTTP 完成。 - Emil Vikström
为什么要作为初始化器,而不是直接放在生产环境配置中? - ckarbass
当我使用Heroku +我的自定义域名时,我是否需要任何指向Heroku的A记录?如果是的话,它的值是什么? - Alan Coromano

3

为了让这个与Network Solutions一起工作,请按照以下步骤操作:

将Network Solutions指向yourdomain.examplewww.yourdomain.example。以下是操作方法。

  1. Account Manager中,选择My Domain Names

  2. 选择您要管理的域名

  3. 在绿色框中,选择Change Where Domain Points

  4. 选择Advanced DNS,然后继续

  5. 首先,通过选择Edit A Records来编辑A记录

    *对于"@ none",输入以下IP地址205.178.189.129,清除 "www" 和 "(所有其他人)"的记录**,然后选择“继续”

  6. 其次,通过选择Edit CNAME Records来编辑主机别名(CNAME记录)

    在别名列中输入“www”

    将TTL设置为7200,但在同一行上,在Other Host部分输入博客服务提供的名称服务器 [ IE 现在按照Heroku的说明操作 www --> yourapp.herokuapp.com(Cedar Stack)]

    选择“继续”

现在等待,并使用以下终端命令检查域名:

host domain.example
host www.domain.example

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接