2016-06-26 12 views
0

私はウェブの周りを検索していますが、私はまだ身を固めていません。同じURLパスで異なるコンテンツを表示するシングルレールアプリケーションを指し示す複数のドメイン

私は、ユーザーが伝記やブログを作成して、自分のドメインを使ってそれにアクセスできるようにするRails 4アプリです。

ユーザーはいくつかの既製のウェブサイトテンプレート(メインページ、私のページ、私の趣味のページなど)から選択し、CMSを使用してコンテンツを読み込むことができます。訪問者がドメインにアクセスしたときに、選択したテンプレートを使用してコンテンツが表示されます。

例:

ユーザ1:

ドメイン:www.user1.com

テンプレート:テンプレート

ユーザー2:

ドメイン:WWW .user2.com

テンプレート:テンプレートB

望ましい結果

訪問者はwww.user1.comを訪問するとき、彼らはメインページが表示されます。 「About Me」をクリックすると、www.user1.com/about-meにリダイレクトされます。訪問者がユーザー2の「About Me」ページにアクセスすると、www.user2.com/about-meが表示されます。

ここで私の質問はどのように設定するのですか?この回答に基づいて

:私は、私は別のコントローラに鉱山に比べルート別のドメインをすることができます知っているRails routing to handle multiple domains on single application

class Domain 
    def self.matches?(request) 
    request.domain.present? && request.domain != "mydomain.com" 
    end 
end 

------in routes.rb------ 

require 'subdomain' 
constraints(Domain) do 
    match '/' => 'blogs#show' 
end 

は、しかし、私はいつでも変更することができ、別のテンプレート・コントローラへのルートにする必要があり(ユーザーは自由にテンプレートを変更できます)。

私は、ホスト名に基づいて着信要求を読み取ることができる一般的なコントローラを設定できることがわかっています。適切なテンプレートを抽出し、そのテンプレートのコントローラ(例:Template1Controller)にリクエストをリダイレクトできます。 "/ template/template1/index"や "/ template/template1/about-me"のようなものになってしまい、非常に悪く醜いものになってしまいます。さらに、テンプレートAには「マイレジューム」ページがあり、テンプレートBには「ファミリーヒストリー」ページがあるかもしれませんが、一部のテンプレートにしか対応していないパスを処理することは非常に難しいでしょう。

これを行う方法はありますか?

私は、リダイレクトなしですべてを処理し、その後render template1/indexを呼び出す単一のコントローラがあると思っていましたが、それを実行する悪い方法だと思います(それぞれ異なるテンプレートが必要です)ページ)。

Btw、これはEC2でホストされます。私が実装しているよ何

EDIT この質問Mapping multiple domain names to different resources in a Rails appと非常によく似ていないが、その後、残念ながら何の答え。私は5年後、誰かがこれをやり遂げる方法を知っているかもしれないと思っています。

ありがとうございます!

答えて

0

私はこれをHerokuでかなりシンプルにしています。おそらくどこでも難しいことではないでしょう。

あなたがDNSを設定したら... Railsの層がどのように見えることができます...

  1. はApplicationControllerにでbefore_filterを作成します。私domain_check方法でbefore_filter :domain_check

  2. 私はちょうどif request.host ~= /whatever/ do this elsif ... elsif ... end

は「これはない」リダイレクトすることができ、またはレンダリングまたは何でも持っています。

関連する問題