是否有执行根据请求的URL是否有尾随斜线Rails的routes.rb中不同路由的方法吗? 这似乎是困难的,因为请求对象有其尾部的斜杠去掉,这意味着一个GET http://www.example.com/about/具有的request.url值http://www.example.com/about 。 该行为防止使用匹配基于请求的约束以及路由通配 。
Answer 1:
一个解决方案,我发现是使用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
这似乎有点小题大做,所以希望有人有一个更好的方法。
文章来源: Matching URLs with a trailing slash in Rails' routes.rb