コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Railsでherokuapp.comを正しいFQDNへリダイレクトさせる

同一ドメインで herokuをプラットフォームで利用している場合に、 ドメインを取得してアプリを使用しても、デフォルトのドメインである

xxx.herokuapp.comからでもアクセスできてしまう。

SEO的にxxx.herokuapp.comでインデクシングされてしまうのはよろしくない(らしい)

なのでxxx.herokuapp.comでアクセスされたら301でリダイレクトさせてあげる

つまりアクセスしてほしいドメイン

www.example.com

だとすると

以下のように、ロボットにアクセスされた場合

http://xxx.herokuapp.com/users/100

このようにFQDNより下は同じにしてリダイレクトするようにする

http://www.example.com/users/100

修正ファイル

application_controller.rbで、ensure_domainを定義してやりbefore_filterで常に呼んであげる

  before_filter :ensure_domain

  # redirect correct server from herokuapp domain for SEO
 def ensure_domain
  return unless /\.herokuapp.com/ =~ request.host

  # 主にlocalテスト用の対策80と443以外でアクセスされた場合ポート番号をURLに含める 
  port = ":#{request.port}" unless [80, 443].include?(request.port)
  redirect_to "#{request.protocol}#{FQDN}#{port}#{request.uri}", status: :moved_permanently
  # パラメタが必要な場合は、request.fullpath、切りたい場合は request.path
 end

リダイレクト先の構成要素のメモ

  • request.protocol => "https://" や "http://"
  • request.port => 80, 443とかlocalだと3000
  • request.path => "/users/100"
  • request.fullpath => "/users/100?page=100?time=now"
  • FQDNはリダイレクトさせたい固定値