我正在使用 rails 3.0.14,并且正在使用资源丰富的样式构建 routes.rb。我想要一个通配符路由来捕获所有与所述任何路由都不匹配的请求。
构建这样一条路线的合适方法是什么?
我正在使用 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'
语句中完全使用“路径”不是强制性的。您可以在那里设置任何令牌:
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 -段
除了@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]