2013-04-30 229 views
1

我跟着Railscast關於將子域添加到Rails應用程序here,並且所有的子域都可以很好地工作。現在,我只是不能找出一種方法來鏈接回根域沒有子域,如果所請求的子域不存在。如何從URL中刪除子域名?

我試着添加以下到我的application_controller.rb文件

redirect_to root_path(subdomain: false) if @city_or_state.nil? 

其中@city_or_state決定渡過請求子域是有效的。 redirect_to回到根目錄,但不刪除子域。

例如,如果用戶試圖去invalid.domain.com他們被重定向到根,但子域不會被刪除。

我試圖讓invalid.domain.com重定向到domain.com

+0

什麼版本的Rails?這在4.0.0.beta1中被破解了,但是在4.0.0.rc1中修復了這個問題 – 2013-04-30 16:04:50

+0

我正在使用Rails 3.1 – 2013-04-30 16:08:44

回答

4

好吧,我知道了。我必須使用以下內容:redirect_to root_url(:host => request.domain)

當我嘗試root_path(:host => request.domain)它沒有工作。只適用於root_url

我發現從丹尼爾·基歐一些意見here

當試圖訪問一個不存在的域,無效的子域從URL刪除了答案。

2

你可以試試這個方式,我認爲它的工作原理! 在application_controller.rb可以添加before_filter :validate_subdomain 那你這個代碼添加到控制器:

private 
def validate_subdomain 
    # @city_or_state must be initialized before this 
    if @city_or_state.nil? 
    redirect_to request.domain 
    end 
end 
+0

@akjoe它有效嗎?我沒有測試它,因爲我必須在本地機器上配置子域名,所以我只爲request.domain做了重定向測試,但是從域本身做了測試。 – tbem 2013-04-30 17:43:05

+0

當我回到我的辦公桌時,我會給它一個鏡頭,讓你知道......謝謝! – 2013-04-30 18:32:41

+0

我添加了'request.domain'並嘗試'blue.lvh.me:3000'(一個無效的子域),它只是去了一個空白頁面。我從日誌中取出這個:'開始GET「/帖子」爲127.0.0.1在2013-04-30 12:40:14 -0800 通過PostsController處理#索引爲HTML 城市負載(0.1ms)SELECT「cities 「。* FROM」cities「WHERE」cities「。」subdomain「='Blue'LIMIT 1 State Load(0.2ms)SELECT」states「。* FROM」states「WHERE」states「。」subdomain「='Blue' LIMIT 1 重定向到http://blue.lvh.me:3000lvh.me' – 2013-04-30 20:53:05