2012-11-14 42 views
15

我正在使用rails 3.0.14,並且我正在使用足智多謀的風格構建routes.rb。我想要一個通配符路由,以捕獲所有與所述路由不匹配的請求。Rails通用路由

什麼是構建這樣的路線的適當方式?

回答

16

對於鐵路4,你需要指定請求類型:

match "*path", to: "application#custom_action", via: :all 

正如其他人所說,把這個在你的路由文件的最底部。

+3

Rails 4重定向到root「match」* path「 :重定向('/'),通過::all' – Epigene

2

除了@steel和@awenkhh,我建議加入以下這條路線的控制器操作

respond_to do |format| 
    format.html 
    # other formats you already support 
    format.all { render text: '' } 
end 

否則,您會得到一些ActionView::MissingTemplate: Missing template錯誤的格式,你沒有想到。

[rant]對於那些試圖在/wp-admin/css/wp-admin.css之類嘗試錯誤攻擊向量的人特別有用。我似乎每天都會收到100個關於/wp-admin/*的請求,這些人來自超級討厭的人,他們顯然希望我能夠獲得更昂貴的Rollbar帳戶計劃。[/ rant]

3

這不是強制性的, match '*path'聲明。您可以設置任何標誌有:

get "*string1" 

get "*string2" 

Rails會你真正的HTTP查詢分配給您的令牌而得名帕拉姆,例如:

get "*user" => "users#show" 

控制檯:

Started GET "/john" .... 
Processing by UsersController#show as HTML 
Parameters: {"user"=>"john"} 

您可以使用多個星號,如get "*id*user"。但是在這種情況下,你會得到一些不可預知的結果,因爲Rails以「直觀的方式」處理2個或更多星號 - 更多信息請參閱http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments