我正在使用django-compress,远期将来我的css和js文件过期。效果很好。
我想为其他静态内容(图片,flash等)做类似的事情。我可以设置此内容的远期过期,但我必须在文件更改时手动重命名。
有没有更好的方法来解决这个问题?
答案 0 :(得分:6)
最好的方法是使用版本化的URL引用您的静态文件,并为您的Web服务器提供重写规则以忽略该版本。
查看完整的Django示例here,其中包含expire_tag
帮助程序(由Arne Brodowski创建):
<link rel="stylesheet" type="text/css"
href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" />
相关的Apache重写规则。
答案 1 :(得分:4)
使用django-compress
,您将CSS和JS视为动态文件 - 这很好。但是,其他文件是静态的 - 而Django并不真的想要提供这些文件。它们应该由Apache或其他网络服务器直接提供。
使用Apache,您可以使用类似
的内容<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>
在.htaccess
或全局Apache配置中。
更新:回复您的评论 - 抱歉,我不明白您问题的细微差别。您无法避免使用不同的URL向客户端指示文件(例如图像)已更改。这是建议的,例如阿帕奇和雅虎!
实施这一点是IMO不太难。它分为两部分:
/media/3/header.png
实际文件在服务器上保留为/media/header.png
。mod_rewrite
之类的工具将传入的网址转换为规范值,即/media/3/header.png
的请求转换为/media/header.png
。 This article更详细地介绍了该功能。