2012-08-07 35 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