2013-03-19 77 views
3

......这是有道理的。我在自定义CMS中使用捕获所有路由进行页面路由。不过,我仍然想在我的公用文件夹中访问用户上传的资源。我的路线如下:Rails抓住所有路线阻止访问公共文件夹

match "(*url)" => 'pages#show' 

而且我的控制做到这一点:

def show 
    @page = Page.where(:url => ['/', params[:url]].join).first 
    begin 
     render :template => "templates/" + @page.template.slug 
    rescue 
     render "public/404.html" 
    end 
end 

现在我知道我大概可以解析URL,在我的控制器,但我不知道是否有一个更好的轨道的方式 - 例如,我可以添加一个异常捕获所有路线?

想法?

+0

静态文件应该优先于Rails。 – tadman 2013-03-19 15:51:32

+0

但他们似乎并没有..我试图访问/public/images/dinner.jpeg时仍然击中控制器,例如 – Pierre 2013-03-19 15:52:43

+0

@tadman哦,我的坏,我不应该公开在URL中。访问/images/dinner.jpeg可以正常工作。如果您将答案写为答案,我会接受它。 – Pierre 2013-03-19 16:08:16

回答

3

如果您的服务器配置正确,通常静态文件将优先于Rails生成的内容。

小心不要混淆相对于应用程序的路径,例如/public/images/test.png与相对于web根目录的路径,这将是/images/test.png。这种相互冲突的“路径”定义让很多开发人员感到困惑。

0

在Rails 5上,默认生产配置通过环境变量标志启用公共文件服务器。将enabled值直接设置为true或确保已设置RAILS_SERVE_STATIC_FILES环境变量。公共目录中的文件将被提供,并且捕获所有路径不会捕获它们。

# config/environments/production.rb 
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 
相关问题