在Rails的routes.rb中使用尾部斜杠匹配URL

有没有办法在Rails的routes.rb中执行不同的路由,具体取决于请求URL是否有尾部斜杠? 这看起来很困难,因为请求对象的尾部斜杠已被删除,这意味着http://www.example.com/about/的GET值为http://www.example.com/about的request.url值。 该行为阻止了使用基于请求的约束以及路由循环的匹配。

我发现的一个解决方案是使用request.env [“REQUEST_URI”],其中包含随请求提交的原始URL。 不幸的是,因为它不是请求的直接字符串属性,所以它需要一个自定义匹配对象 :

class TrailingSlashMatcher def matches?(request) uri = request.env["REQUEST_URI"] !!uri && uri.end_with?("/") end end AppName::Application.routes.draw do match '/example/*path', constraints: TrailingSlashMatcher.new, to: redirect("/somewhere/") end 

这似乎有点矫枉过正,所以希望有人有更优雅的方法。