我正在使用rails 3.0.14,我正在使用资源丰富的样式构建routes.rb。我想要一个通配符路由来捕获与所述路由不匹配的所有请求。
构建这样一条路线的恰当方法是什么?
答案 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]