26

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

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

4

4 回答 4

33

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

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

另请参阅http://guides.rubyonrails.org/routing.html -> 3.10

于 2012-11-14T22:58:33.840 回答
28

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

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

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

于 2014-11-14T17:19:59.257 回答
7

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 -段

于 2016-08-24T10:16:44.260 回答
3

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

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

否则,您会遇到一些ActionView::MissingTemplate: Missing template出乎意料的格式错误。

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

于 2015-12-04T16:36:21.110 回答