我使用django-compress與遠期將過期爲我的CSS和JS文件。很棒。什麼是最好的方式來設置與Django的圖像遠期過期?
我想爲其他靜態內容(圖像,Flash等)做類似的事情。我可以爲這個內容設定一個遙遠的未來,但我必須在文件更改時手動重命名這些文件。
有沒有更好的方法來處理這個問題?
我使用django-compress與遠期將過期爲我的CSS和JS文件。很棒。什麼是最好的方式來設置與Django的圖像遠期過期?
我想爲其他靜態內容(圖像,Flash等)做類似的事情。我可以爲這個內容設定一個遙遠的未來,但我必須在文件更改時手動重命名這些文件。
有沒有更好的方法來處理這個問題?
使用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來向客戶端指示文件(例如圖像)已更改,您無能爲力。這是由例如Apache和YAHOO!
實施這是IMO不太難。它分爲兩部分:
/media/3/header.png
其中實際文件在服務器上保持爲/media/header.png
。mod_rewrite
的工具將傳入的URL轉換爲規範值,即請求/media/3/header.png
轉換爲/media/header.png
。 This article更詳細地描述了該特徵。最好的辦法是用版本化的URL引用你的靜態文件,並給你的Web服務器一個重寫規則來忽略版本。
看到一個完整的Django示例here,其包括expire_tag
輔助(由Arne Brodowski創建):
<link rel="stylesheet" type="text/css"
href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" />
和有關的Apache重寫規則。
現在,這很漂亮。我必須記住那一個。 – 2009-09-12 10:32:20
不錯的,次要的缺點是,這種方法不會在css內引用版本圖像。 – Bula 2013-04-26 16:40:36
我知道如何設置圖像的遠期未來,但我想知道在編輯圖像時是否有更好的方法來處理。假設我有header.png,將來會過期。然後我在Photoshop中進行編輯。我必須將其命名爲header1.png,然後將代碼中的任何引用更改爲header1.png。對我不理想。 – 2009-09-11 18:45:32