2015-06-20 46 views
2

在應用程序控制器內部的Rails 4應用程序中實現重定向。301重定向Rails 4總是前往主頁

我得到它的主頁上工作,所以foo.com會重定向到www.foo.com,但是,如果我在url foo.com/about鍵入它只是重定向回主頁www.foo.com

這裏是我使用的代碼(application_controller.rb):

before_filter :add_www_subdomain 

def add_www_subdomain 
    unless /^www/.match(request.host) 
    redirect_to("#{request.protocol}www.#{request.host_with_port}", 
       :status => 301) 
    end 
end 

時遇到這一發現文檔專門用於軌道4.什麼是去了解這一點的最好方法是什麼?我想foo.com/about重定向到www.foo.com/about

+1

這有點不尋常的做這種規範域名重定向在應用程序級別。如果您的應用程序前面有一臺服務器,如Apache或nginx,則可以在那裏進行重定向。這也可以通過DNS記錄處理 - 查看CNAME記錄。 – rossettistone

+0

有沒有像我這樣做的任何併發症?我使用DNSimple,但是,當我使用https時,它們無法重定向。 – Kathan

+1

似乎應該可以正常工作。肯定比在前一層捕獲它慢一點(例如nginx,DNS),但這對於這種重定向來說並不是什麼大問題。剛剛想到我會提出這一點之前,你承諾這樣做:-) – rossettistone

回答

0

端了設置它像這樣在應用控制器:

private 

def add_www_subdomain 
    unless request.host == 'www.foo.com' 
    redirect_to 'https://www.foo' + request.fullpath 
    end 
end 

和濾波器之前調用:

before_filter :add_www_subdomain 
1

#host_with_port替換爲#fullpath並且您將被設置。

before_filter :add_www_subdomain 

def add_www_subdomain 
    unless /^www/.match(request.host) 
    redirect_to("#{request.protocol}www.#{request.fullpath}", status: 301) 
    end 
end 
+0

您是否可以編輯答案幷包含應該使用的代碼。它目前正在返回'https:// foo.comwww.foo.com/about' – Kathan

+0

@Kathan:編輯 –

+0

這不起作用,它只是返回www..com我一直在試圖弄清楚這一點。任何建議都會很棒。 –