匹配以斜杠的URL在Rails的routes.rb中(Matching URLs with a tr

2019-10-17 16:29发布

是否有执行根据请求的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