从旧域重定向到新域(SEO友好)

Mar*_*rov 14 ruby-on-rails

我将Heroku应用程序上的自定义域更改为新域.现在我将创建一个新的Heroku应用程序,其唯一目的是重定向到第一个应用程序.

我在Google网站管理员中读到,我应该像这样执行301重定向:

http://old.com/anypath/123

to

http://new.com/anypath/123
Run Code Online (Sandbox Code Playgroud)

我如何在Rails中做到这一点?

Ben*_*Lee 31

将它放在ApplicationControlller中的before过滤器中:

class ApplicationController
  before_action :redirect_if_old

  protected

  def redirect_if_old
    if request.host == 'old.com'
      redirect_to "#{request.protocol}new.com#{request.fullpath}", :status => :moved_permanently 
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意今天阅读此内容的任何人:不推荐使用request_uri.使用``#{request.protocol} new.com#{request.fullpath}"`而不是``http://new.com# {request.request_uri}"` (3认同)

And*_*all 5

在您的控制器操作中:

redirect_to "http://new.com#{request.request_uri}", :status => 301
Run Code Online (Sandbox Code Playgroud)

但是,Heroku 对于你在开发中心记录的内容有一个更好的选择:

class ApplicationController
  before_filter :ensure_domain

  APP_DOMAIN = 'myapp.mydomain.com'

  def ensure_domain
    if request.env['HTTP_HOST'] != APP_DOMAIN
      # HTTP 301 is a "permanent" redirect
      redirect_to "http://#{APP_DOMAIN}#{request.request_uri}", :status => 301
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 这在Rails 3.1中不起作用 - `request_uri`消失了.请改用"request.path". (3认同)