2011-09-28 71 views
9

我改變了自定義域上的Heroku我的應用程序到一個新的。現在我將創建一個新的Heroku應用程序,其目的僅僅是重定向到第一個應用程序。重定向從舊域到新的(搜索引擎友好)

我在谷歌網站管理員讀了我應該做301重定向這樣的:

http://old.com/anypath/123 

to 

http://new.com/anypath/123 

如何做到在Rails的?

回答

25

把這個在在ApplicationControlller過濾器之前:

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

但是,如何重定向所有請求,而不僅僅是「http://old.com/anypath/123" ? –

+1

@MartinPetrov,我更新了我的答案,以顯示如何處理所有請求。 –

+0

謝謝,這看起來很簡單。 –

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 
+0

謝謝。一個問題 - 這會將所有內容重定向到新域的根目錄,還是會匹配新域中的確切頁面? –

+0

已更新。 Ben雖然打敗了我。 –

+0

也謝謝。對不起,不能標記你的答案。 –