2013-03-19 110 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? 
相關問題