1

有没有办法根据请求 URL 是否有斜杠在 Rails 的 routes.rb 中执行不同的路由?这似乎很困难,因为请求对象的尾部斜杠被删除,这意味着 http://www.example.com/about/ 的 GET 具有http://www.example.com/aboutrequest.url 值。这种行为会阻止使用基于请求的约束以及route-globbing进行匹配。

4

1 回答 1

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

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

于 2013-02-04T22:00:06.810 回答