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]