我将Heroku应用程序上的自定义域更改为新域。现在我将创建一个新的Heroku应用程序,其唯一目的是重定向到第一个应用程序。
我在Google网站管理员中读到,我应该像这样进行301重定向:
http://old.com/anypath/123
to
http://new.com/anypath/123
我如何在Rails中执行此操作?
答案 0 :(得分:31)
将它放在ApplicationController中的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
答案 1 :(得分:5)
在您的控制器操作中:
redirect_to "http://new.com#{request.request_uri}", :status => 301
然而,Heroku在他们的开发中心中记录的可能是slightly better option:
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
答案 2 :(得分:0)
您可以在routes.rb
文件而不是控制器中进行此操作:
Rails.application.routes.draw do
constraints(host: 'old.com') do
get '(*)', to: redirect(host: 'new.com')
end
# your existing routes here
end
这将执行301重定向,即the default for the redirect route helper