web-dev-qa-db-ja.com

Heroku http://をhttp:// wwwにリダイレクトする方法

http://vinderhimlen.dkhttp://www.vinderhimlen.dk にリダイレクトするにはどうすればよいですか?

21
Rails beginner

最善の策は、DNSプロバイダーでリダイレクトを設定することです。これにより、リクエストがサーバーに到達するずっと前にリダイレクトが発生します。 Heroku Dev Center から:

サブドメインリダイレクトにより、ネイキッドドメインへのすべてのリクエストに対して、指定されたサブドメインへの301の永続的なリダイレクトが発生するため、現在および将来のすべてのリクエストが適切にルーティングされ、完全なwwwホスト名がユーザーの場所フィールドに表示されます。

DNSimpleは、heroku-sslendpoint.comネイキッドドメインからwww.heroku-sslendpoint.comサブドメインにリダイレクトする便利なURLリダイレクトを提供します。 enter image description here

Herokuで適切に構成するには、wwwサブドメインをyourappname.herokuapp.comへのCNAMEレコード参照にする必要があります。

これを行うのはDNSimpleだけではありません。私のDNSプロバイダーは 123 Reg であり、サポートしていますが、web forwardingと呼んでいます。

35
Mike

リクエストライフサイクルのかなり早い段階でそれを行うことをお勧めします。 Apacheを使用する場合は、VirtualHostsファイルにURLRewriteを追加します。 Herokuでは、Rackミドルウェアを追加する必要があります。

ここでは 逆の方法(つまり、www.example.org-> example.org)。ユースケースに変更しても大きな問題はないと思います。

このように、リクエストはログに表示されず、Railsのすべてのリクエスト解析を必要としません。

10

私の解決策:

Terminal:

heroku addons:add custom_domains:basic
heroku domains:add www.vinderhimlen.dk
heroku domains:add vinderhimlen.dk

そして(http://devcenter.heroku.com/articles/custom-domains):

class ApplicationController
  before_filter :ensure_domain

  APP_DOMAIN = 'www.vinderhimlen.dk'

  def ensure_domain
    if request.env['HTTP_Host'] != APP_DOMAIN
      # HTTP 301 is a "permanent" redirect
      redirect_to "http://#{APP_DOMAIN}", :status => 301
    end
  end
end
4
Rails beginner

アクションコントローラを使用していると仮定すると、 redirect_to

redirect_to "http://www.vinderhimlen.dk"
2

通常、これは、Apacheのmod_rewriteモジュールなどを使用してHTTPサーバーレベルで実行し、リクエストがRailsのスタックに到達する前に発生するようにします。ただし、HerokuではHTTPサーバー構成にアクセスできないため、別の方法が必要です。

Refraction を確認することをお勧めします。これは、mod_rewriteを置き換えるように設計されたRackミドルウェアです。古き良き読み取り可能なRubyコードを使用して書き換えルールを記述でき、タスクにRails自体を使用するよりも高速です。

1
John Topley

Wwwドメインも追加する必要があります。

heroku domains:add www.vinderhimlen.dk

この中の正義の答えを参照してください SO記事 -これに対する彼の方法は明確で、単純で、効果的で、カスタマイズ可能です。

0
Will Ayd