Rails抓住所有路线

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

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

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

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

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

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

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

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

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

除了@steel和@awenkhh之外,我建议在该路由的控制器操作中添加以下内容

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

否则,您最终会ActionView::MissingTemplate: Missing template一些ActionView::MissingTemplate: Missing template您不期望的格式的ActionView::MissingTemplate: Missing template错误。

[rant]特别有助于那些在/wp-admin/css/wp-admin.css等周围尝试错误攻击向量的人。 我似乎每天都会收到大约100个/wp-admin/*的请求,这些请求来自那些显然希望我获得更昂贵的Rollbar帐户计划的超级烦人。[/ rant]