Rails 应用程序中的尾部斜杠行为

发布于 2024-11-10 08:40:11 字数 491 浏览 2 评论 0原文

我目前正在尝试使用类别/文章模式模仿 Rails 中的文件夹/文件行为。所以,我在路线中有这个:

 match '/:category/' => 'category#list_articles'
 match '/:category/:article.:format' => 'article#show'

基本上,请求网址是:

http://www.example.com/category/
http://www.example.com/category/article.html

一切正常。问题是它运行得很好。像 http://www.example.com/category 这样的 URL(不带尾部斜杠)也提供文章列表。是否存在一种方法可以使用 404 来阻止此行为,或者更好地重定向到带有尾部斜杠的类别?

使用 Rails 3、nginx、ruby 1.9.2。谢谢!

I am currently trying to mimic folder/files behavior in rails with category/articles schema. So, I have this in routes :

 match '/:category/' => 'category#list_articles'
 match '/:category/:article.:format' => 'article#show'

Basically, request urls are :

http://www.example.com/category/
http://www.example.com/category/article.html

Everything works. The problem is it's working to well. An url like http://www.example.com/category (without the trailing slash) serves also the list of articles. Does it exist an a way either to block this with a 404 or better to redirect to the category with the trailing slash ?

Using Rails 3, nginx, ruby 1.9.2. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ˇ宁静的妩媚 2024-11-17 08:40:11

我不确定 Rails 中是否有东西可以为您做到这一点,但这应该可以:

class TrailingSlashes                                                                                                      
  def initialize(app)
    @app = app
  end

  def call(env)
    if match = env['REQUEST_PATH'].match(/(.*)\/$/)
      response = Rack::Response.new
      response.redirect(match[1])
      response
    else
      @app.call(env)
    end
  end
end

I'm not sure there isn't something in rails that does it for you, but this should do:

class TrailingSlashes                                                                                                      
  def initialize(app)
    @app = app
  end

  def call(env)
    if match = env['REQUEST_PATH'].match(/(.*)\/$/)
      response = Rack::Response.new
      response.redirect(match[1])
      response
    else
      @app.call(env)
    end
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文