2011-01-17 13 views
0

HerokuでホストされているRailsアプリケーションでは、Zerigo DNSアドオンを使用して、カスタムドメイン(mydomain.orgなど)がHerokuアプリケーションを指すように指示しています。私たちはmydomain.orgに登録されたSSL証明書を持っていますRails App on Heroku - .comから.orgへのリダイレクト

今、mydomain.comがmydomain.orgにリダイレクトされるようにしたいと思います。コントローラ/ラックレベルでリダイレクトルールを実装しようとしました。動作しません。ブラウザのURLが.orgの代わりに.comを指している

誰もがHerokuアプリで同じ問題に直面したことはありますか?

+0

「動作しません」以外は、試したことと失敗した方法について詳しく説明できますか? –

+0

私はRack :: ForceDomain(http://theadmin.org/articles/2010/06/10/daily-code-reading-rack-force-domain/)を使用しました。実際には火かき棒の中には.comから.orgまでの301が表示されますが、ブラウザのURLは.com – dexter

+0

のままです。アプリケーションコントローラでは、リクエストに含まれるホスト名に基づいて、正規表現に基づいて " com "を" .org "にリダイレクトします。前のコメントと同じ問題です。 – dexter

答えて

1

"example.com"から "www.example.com"(ここではhttp://docs.heroku.com/custom-domainsに記載されています)にリダイレクトするために、次の手法を使用しました。あなたのケースでは、.comから.orgへのリダイレクトが可能です。

アプリ/コントローラ/ application_controller.rbでは:あなたのケースでは

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :ensure_domain 

    protected 

    def ensure_domain 
    if request.env['HTTP_HOST'] != 'www.example.com' && Rails.env.production? 
     redirect_to "http://www.example.com", :status => 301 
    end 
    end 

end 

、あなたの.COMのDNSレコードを指しますし、Herokuの上で実行しているアプリにドメインを.orgの。あなたのアプリケーションは、HTTP_HOSTが.org URLを指定しているかどうかをチェックします。そうでない場合は、.org URLにリダイレクトされます。

+0

'ensure_domain'はコントローラクラスに属していません(コントローラクラスのSQLは動作しますが、そこには属しません)。これはRackミドルウェアに属しています。これは' config.middleware 'config/environments/production.rb'の中から' .use'を削除してください。 – yfeldblum

+0

@ Justice:これは、HerokuにリンクされているURLから取得されました。もっと多くの人がこのリファレンスよりもリファレンスを使用するので、あなたがここで説得力のある議論をしていると感じたらそれを書いてください。 – coreyward

+0

これが最も簡単な方法です。私が言及したようにまったくきれいではないのは、環境への依存(コントローラに委ねられるべき)を導入し、コントローラへのドメイン名への依存を導入するからです。 configへ)。 Herokuサンプルが動作し、私が挙げた懸念があなたにとって問題でないなら、それに付随する害はありません。あなたのコードがもっと複​​雑になっても、あなたは私の提案を考慮することができます。 – yfeldblum

関連する問題