http://vinderhimlen.dk を http://www.vinderhimlen.dk にリダイレクトするにはどうすればよいですか?
最善の策は、DNSプロバイダーでリダイレクトを設定することです。これにより、リクエストがサーバーに到達するずっと前にリダイレクトが発生します。 Heroku Dev Center から:
サブドメインリダイレクトにより、ネイキッドドメインへのすべてのリクエストに対して、指定されたサブドメインへの301の永続的なリダイレクトが発生するため、現在および将来のすべてのリクエストが適切にルーティングされ、完全なwwwホスト名がユーザーの場所フィールドに表示されます。
DNSimpleは、
heroku-sslendpoint.com
ネイキッドドメインからwww.heroku-sslendpoint.com
サブドメインにリダイレクトする便利なURLリダイレクトを提供します。Herokuで適切に構成するには、wwwサブドメインをyourappname.herokuapp.comへのCNAMEレコード参照にする必要があります。
これを行うのはDNSimpleだけではありません。私のDNSプロバイダーは 123 Reg であり、サポートしていますが、web forwarding
と呼んでいます。
リクエストライフサイクルのかなり早い段階でそれを行うことをお勧めします。 Apacheを使用する場合は、VirtualHostsファイルにURLRewriteを追加します。 Herokuでは、Rackミドルウェアを追加する必要があります。
ここでは 例 逆の方法(つまり、www.example.org
-> example.org
)。ユースケースに変更しても大きな問題はないと思います。
このように、リクエストはログに表示されず、Railsのすべてのリクエスト解析を必要としません。
私の解決策:
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
アクションコントローラを使用していると仮定すると、 redirect_to
:
redirect_to "http://www.vinderhimlen.dk"
通常、これは、Apacheのmod_rewrite
モジュールなどを使用してHTTPサーバーレベルで実行し、リクエストがRailsのスタックに到達する前に発生するようにします。ただし、HerokuではHTTPサーバー構成にアクセスできないため、別の方法が必要です。
Refraction を確認することをお勧めします。これは、mod_rewrite
を置き換えるように設計されたRackミドルウェアです。古き良き読み取り可能なRubyコードを使用して書き換えルールを記述でき、タスクにRails自体を使用するよりも高速です。
Wwwドメインも追加する必要があります。
heroku domains:add www.vinderhimlen.dk
この中の正義の答えを参照してください SO記事 -これに対する彼の方法は明確で、単純で、効果的で、カスタマイズ可能です。