1

これは実際には難しい問題ではないと思いますが、非常に多くの異なるソリューションを使用しており、何が最適かはわかりません。

Ruby on Rails を使用していて、Heroku にアプリを持っています。ネイキッド ドメイン (@) のすべてを www ドメインに 301 リダイレクトしたいと考えています。例えば

http://domain.com --> http://www.domain.com http://domain.com/subpage --> http://www.domain.com/subpage

現在、最初に @ と www の両方のエントリを削除して、DNS でこれを処理しています。次に、Web サイト全体のリダイレクトをhttp://www.domain.comに設定します(これにより、@ と www の両方の DNS エントリが再作成されます)。最後に、www DNS エントリを CNAME と heroku-app (http://myapp.herokuapp.com) の名前に変更します。

これは、http://domain.com/subpagehttp://www.domain.com (サブページなし) に転送しているようです。

私が今探しているのは、これをシンプル/エレガントな方法で処理するための適切な/推奨される方法です。

DNS? ルート?.htaccess? (そうであれば、RubyOnRails で .htaccess を変更するにはどうすればよいですか)

前もって感謝します!

4

4 に答える 4

1

(注意:これは何も試していませんが、機能するはずです)

DNSまたはWebサーバー機能を使用してそれを行うのが良い方法であると主張する人もいるかもしれません。ただし、必要に応じてレールを使用して行うこともできます。

全体として、必要に応じて、プロセス内のパラメータ/パスを簡単に保持できるという利点があります。さらに、ロジックはアプリ内にあり、ドメイン名をスケールアップ/変更する必要がある場合でも失われることはありません。悪い面として、誰かが裸のドメイン名を使用すると、フルスタックがヒットします。

before_filterアプリケーションコントローラで試してみることができます:

before_filter :redirect_to_www

def redirect_to_www
  redirect_to subdomain: 'www' unless request.subdomain == 'www'
end

「魔法のリダイレクト」を避けて、すべての人に明確にしたい場合は、レール3で、ルートで直接これを行うことができます。

constraints ->(request){ request.subdomain != 'www' } do
  match '(*all)' => redirect( subdomain: 'www' )
end 

また、デフォルトのURLオプション(アプリケーションコントローラー)にサブドメインを追加する必要があります。

def default_url_options( option = {} )
  {subdomain: 'www'}
end
于 2013-01-25T19:34:48.503 に答える
1

これらの 質問はあなたの質問に関連している可能性があります。(私が読んだことから)、heroku は .htaccess などへのアクセスを許可していないようです。そのため、Rack ミドルウェアが最適なオプションのようです。

于 2013-01-25T17:57:09.050 に答える
1

ドメインはどこに登録されていますか? GoDaddy を使用している場合、301 リダイレクトを処理するサービスが提供されますが、ホスティング プランのいずれかにサインアップする必要があります。最低料金で十分です (月額 ~ $5)。無料ではありませんが、痛みがなく、コーディングなども必要ありません。

于 2013-01-25T18:10:39.733 に答える
0

結局、私がしなければならなかったのは、@-DNSを通常のWebホストにポイントし(@はIPを要求し、HerokuはCNAMEのみを受け入れるため)、www-DNSをHerokuにポイントすることでした。

私の通常のウェブホストでは、次のようにすべてのトラフィックをwwwドメインにリダイレクトする.htaccessを配置しました。

RewriteEngine On

### re-direct to www
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
于 2013-02-04T07:19:32.310 に答える