2012-08-07 33 views
2

我有一個Rails的網絡應用程序,它具有靜態文件在動態寧靜的網址下。例如:Nginx的網址重寫寧靜的網址

/projects/1/attachments/some_file.xls 

我想設置Nginx的重定向到服務器上的靜態文件:

/public/attachments/1/some_file.xls 

其中1是動態的項目ID。

位置塊和重寫語句如何查找Nginx配置文件?


UPDATE

我下面標記,因爲它回答了我原來的問題的答案。雖然在我的情況下重寫我的項目附件URL是沒有必要的。我忘了我已經在我的Rails視圖erb中重映射了這個url。

我的真正目標是阻止Thin將緩存響應頭添加到我的附件文件中。最終,我可以通過添加像這樣的附件的位置來防止這種情況:

location /attachments/ { 
    expires off; 
    add_header Pragma "no-cache"; 
    add_header Cache-Control "no-cache, no-store"; 
    access_log off; 
    break; 
} 

回答

0

聽起來你做你的圖像/文件庫的一些錯誤,因爲你不應該做的回形針,蜻蜓等任何nginx的重寫規則,只是工作。例如,在回形針中,您可以在模型中使用DSL時明確設置url和/或路徑格式。對於回形針它應該是這樣的:

has_attached_file :attachment, 
        :url => '/attachments/:id/:style/:basename.:extension', 
        :path => ':rails_root/public/attachments/:id/:style/:basename.:extension' 

然後,一切都應該得到nginx的自動服務,因爲它在你的公共目錄。不需要重寫規則。

+0

呃,我其實已經忘了這些網址已經在View erb中手動重新映射了。我真正想要實現的是繞過Thin,這樣我就可以打開與緩存相關的響應頭。 – 2012-08-08 19:58:50

+0

此外,這些附件不是圖像。他們生成了sql文件,生成了excel文件,上傳了csv文件等。我沒有使用Paperclip或attachment_fu,儘管我當時評估過它們。我只是將這些附件存儲在public/attachments /:project_id下並隱藏了用戶的這一事實。用戶可以看到url projects /:project_id/file_name。沒有模型。 – 2012-08-08 20:03:10

+0

我提到的所有庫都可以處理任何文件類型,而不僅僅是圖像。但是,通常當我做你喜歡的事情時,我會創建一個Assets模型來封裝所有這個文件存儲邏輯。 – SupaIrish 2012-08-09 09:27:16