使用CNAME重定向为www子域在Heroku上设置自定义域

pmc*_*255 8 dns cname ruby-on-rails heroku

我正在使用Heroku,并为我的应用添加了几个自定义域名,即myapp.comwww.myapp.com.

我在GoDaddy的DNS有三个A记录,'@'指向三个单独的Heroku IP,以及一个指向'www'子域的CNAME proxy.heroku.com.

我想要做的是将任何流量重定向www.myapp.commyapp.com.我尝试将CNAME设置为"@",但仍然保留在同一个域中.有没有办法可以在DNS级别强制进行此重定向?

Tom*_*kas 9

CNAME不是重定向,只是您域名的规范名称.这意味着它的行为就像它指向的域(在你的情况下是myapp.com).您的浏览器获得与myapp.com相同的IP地址,并向其发送请求.

重定向在HTTP级别或更高级别执行.你可以在你的应用程序中执行此操作,或者为此创建另一个简单的应用程序.

这是一个直接在您的应用中进行重定向的简单示例:

# in your ApplicationController
before_filter :strip_www

def strip_www
  if request.env["HTTP_HOST"] == "www.myapp.com"
    redirect_to "http://myapp.com/"
  end
end
Run Code Online (Sandbox Code Playgroud)

或者你可以使用rails metal,它会做同样的事情,但要快得多:

# app/metal/hostname_redirector.rb
class HostnameRedirector
  def self.call(env)
    if env["HTTP_HOST"] == "www.myapp.com"
      [301, {"Location" => "http://myapp.com/"}, ["Found"]]
    else
      [404, {"Content-Type" => "text/html"}, ["Not Found"]]
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

您还可以使用正则表达式匹配www.主机名前面的所有请求.