Rails抓住所有路线

时间:2012-11-14 22:48:29

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用rails 3.0.14,我正在使用资源丰富的样式构建routes.rb。我想要一个通配符路由来捕获与所述路由不匹配的所有请求。

构建这样一条路线的恰当方法是什么?

4 个答案:

答案 0 :(得分:28)

match '*path' => 'your_controller#your_action'

在routes.rb文件的末尾。这很重要,因为路线是自上而下的。

另见http://guides.rubyonrails.org/routing.html - > 3.10

答案 1 :(得分:23)

对于Rail 4,您需要指定请求类型:

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

正如其他人所说,把它放在路线文件的最底部。

答案 2 :(得分:4)

match '*path'语句中使用“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

答案 3 :(得分: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]