2010-11-09 102 views
34

只要用戶點擊錯誤的頁面,rails就會從公用文件夾中顯示404.html。但是,我只想將瀏覽器重定向到根頁面,而不顯示任何內容。所以我嘗試了globbing,但沒有成功,它仍然顯示404頁面。這裏是我的路線文件摘錄:Rails:將所有未知路由重定向到root_url

# ... 
map.root :controller => 'home', :action => 'home' 
map.connect '*', :controller => 'home', :action => 'home' 

有什麼建議嗎?多謝你們!

+0

我假設你有一個'home_controller',其中包含'home'動作,它表示類似render:nothing => true的東西嗎? – jenjenut233 2010-11-09 14:39:25

+0

不。在家庭控制器中有一個家庭操作,並且還有一個家庭視圖(home.html.erb)。 – 2010-11-10 17:57:20

回答

69

如果你的項目是由軌道3供電,只需將此行添加到您的routes.rb

match '*path' => redirect('/') 

編輯:Rails 4支持

match '*path' => redirect('/'), via: :get 
or 
get '*path' => redirect('/') 
+0

謝謝!那麼,它的Rails 2.3.10 – 2010-11-10 17:56:46

+0

感謝*很多*,男人!它做到了。這就是我在rails 2中做的:'map.connect'* path',:controller =>'home',:action =>'home''所以,這是'* path''這是關鍵整件事。再次感謝:-) – 2010-11-10 19:07:06

+0

你也可以使用'get'來代替'match',這只是簡單的添加'via::get'。 – Peeja 2013-10-28 21:31:06

1

你需要創建一個控制器做

class RedirectsController 

    def index 
    redirect_to root_url 
    end 
end 

而在你的路線

map.connect '*', :controller => 'redirects', :action => 'index' 
+0

Rails 3也是這個答案嗎? – 2011-11-17 12:15:03

+0

也適用於導軌3。你只需要用匹配來改變ligne。請參閱路由指南中的globing – shingara 2011-11-18 11:01:06

19

就像Arkan的回答一樣。有一點,如果不想在開發環境中這種行爲,那麼可以這樣做 -

match '*path' => redirect('/') unless Rails.env.development? 
10

Rails的4-

的routes.rb

,您仍然可以使用一個簡單的get到重定向所有未知的路線。

get '*path', to: 'home#index' 

如果您希望提供路由到POST和GET你仍然可以使用匹配的請求,但Rails的希望您通過via指定請求方法。

match "*path" => "home#index", via: [:get, :post] 

記住routes.rb依次執行(匹配適合的供給路徑結構的第一路徑),所以把通配符捕捉在您的匹配數的底部。

+1

謝謝您的通知在底部。 – ahnbizcad 2015-02-18 15:40:46

+0

這是否仍然有效?似乎不適用於我的Rails 4應用程序。 – 2016-04-13 20:01:28