Nginx url重写为restful url

时间:2012-08-07 19:36:44

标签: rest configuration url-rewriting nginx static-files

我有一个Rails网络应用程序,它在动态的restful urls下有静态文件。例如:

/projects/1/attachments/some_file.xls

我想将Nginx设置为重定向到服务器上的静态文件:

/public/attachments/1/some_file.xls

其中1是动态项目ID。

位置阻止和重写语句如何查找Nginx配置文件?


更新

我在下面给出了答案,因为它回答了我原来的问题。虽然在我的情况下不需要重写我的项目附件网址。我忘了我已经在我的Rails视图中重新映射了url。

我的真正目标是阻止Thin将缓存响应标头添加到我的附件文件中。最终,我能够通过添加像这样的附件的位置来防止这种情况发生:

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

2 个答案:

答案 0 :(得分:0)

这是一个简单的例子。

location /project/ {
    rewrite ^/project/([0-9]+)/attachments/(.*)$ /public/attachments/$1/$2 last;
}

如果您想要更复杂的规则,请参阅官方帮助。

http://wiki.nginx.org/HttpRewriteModule#rewrite

答案 1 :(得分:0)

听起来你的图像/文件库出了问题,因为你不应该为Paperclip,Dragonfly等做任何nginx重写规则。例如,在Paperclip中,您可以在模型中使用DSL时显式设置URL和/或路径格式。对于Paperclip,它看起来像这样:

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

然后一切都应该由nginx自动提供,因为它在你的公共目录中。不需要重写规则。