8

私は Heroku を使用しており、アプリ用にいくつかのカスタム ドメイン、つまりmyapp.comとを追加しましたwww.myapp.com

私の GoDaddy の DNS には、3 つの個別の Heroku IP を指す「@」の 3 つの A レコードと、. を指す「www」サブドメインの CNAME がありproxy.heroku.comます。

私がやりたいことは、すべてのトラフィックをwww.myapp.comにリダイレクトすることmyapp.comです。CNAME を「@」に設定しようとしましたが、それでも同じドメインのままです。このリダイレクトを DNS レベルで強制する方法はありますか?

4

3 に答える 3

9

CNAME is not a redirect but only a canonical name for your domain. That means that it behaves just like the domain it points to (myapp.com in your case). Your browser gets the same IP address as myapp.com has and sends a request to it.

Redirects are performed at the HTTP level or above. You can do this for example in your app or create another simple app just for that.

Here's a simple example to do the redirect directly in your app:

# 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

または、レール メタルを使用することもできます。これは同じことを行いますが、はるかに高速です。

# 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

www.正規表現を使用して、ホスト名の前にあるすべてのリクエストを照合することもできます。

于 2010-06-19T11:16:31.337 に答える
1

そして、これがnode.jsのソリューションです

$ heroku config:set APP_HOST=yourdomain.com

app.configure('production', function() {
    // keep this relative to other middleware, e.g. after auth but before
    // express.static()
    app.get('*', function(req, res, next) {
        if (req.headers.host != process.env.APP_HOST) {
            res.redirect('http://' + process.env.APP_HOST + req.url, 301)
        } else {
            next()
        }

    })
    app.use(express.static(path.join(application_root, 'static')))
})

これにより、domain.herokuapp.com も yourdomain.com にリダイレクトされ、検索エンジンが重複したコンテンツをインデックス化するのを防ぎます。

于 2012-02-28T20:17:48.527 に答える
0

rack-canonical-hostgemをインストールし、これをRack構成ファイルに入れることで、Rackアプリでこれを非常に簡単に行うこともできます。

require 'rack-canonical-host'
use Rack::CanonicalHost, 'myapp.com'
于 2012-02-28T20:21:26.120 に答える