代码之家  ›  专栏  ›  技术社区  ›  marcamillion blelump

如何防止routes.rb拦截到/blog的请求?

  •  2
  • marcamillion blelump  · 技术社区  · 10 年前

    我的 /blog 目录只是一堆静态HTML文件。这很好。

    当我去 localhost/blog 它工作得很好-它为我的中间人生成的博客呈现index.html。太棒了

    但当我点击任何帖子时,它会给我一个路由错误:

    No route matches [GET] "/blog/2015/03/11/hello_world"
    

    我很确定发生这种情况的原因是因为我的 routes.rb :

      get '/:friendly_id', to: 'posts#show'
      get '/rbt/:name', to: redirect {|path_params, _| "/#{path_params[:name].gsub(/^\d+\-/, '')}" } 
      get ':name',      to: 'posts#show'
    

    我需要所有这些路由,但我不希望HTML请求不必要地攻击我的Rack中间件。。。。或者更糟的是,执行这个错误似乎表明正在发生的DB查询。

    如何将所有请求限制在 /blog/ 只是下定决心 public/blog/ 目录

    编辑1

    我意识到上面的描述可能不清楚。我的Rails应用程序不是博客,所以 posts 你看到上面提到的,不是博客的帖子。它们是另一种帖子,由Rails应用程序通过DB等单独管理。我后来添加了一个真正的 /博客 这将是由 MiddleMan 它会放在我的轨道上 /public/blog 文件夹我的想法是 /博客 目录,根本不应该命中我的机架中间件。

    3 回复  |  直到 10 年前
        1
  •  4
  •   Eugene Petrov    10 年前

    您可以通过添加 config.middleware.use Rack::Static, urls: ['/blog'], root: 'public' 到config/application.rb,但imho最好比你的应用程序更早地设置一个web服务器来拦截和服务/blog。

    还有你的情况 /blog/2015/03/11/hello_world 似乎是一个目录名,如果添加 index.html 到链接,它应该按照您的预期工作,而不更改任何配置。

        2
  •  1
  •   Sumit Mahamuni    10 年前

    当您的应用程序由Web服务器运行时,其webroot将是公共目录。所以,如果您的博客目录位于公共目录中,这应该会起作用。 localhost/blog

    尝试与一起跑步 nginx 具有以下配置:

    root /root/path/to/your_app/public;
    
        3
  •  1
  •   jcuenod    10 年前

    你不能创建一个 static_url 控制器并配置路由,以便

    get '/blog', to: 'static_url#show'
    

    然后在你的控制器中

    def show
      render file: request.fullpath
    end
    

    很抱歉,我现在不能测试,但我相信你能理解。此外,我猜你需要检测不存在的页面。