【问题标题】:What is the best way to set far future expires on images with Django?使用 Django 在图像上设置远期过期的最佳方法是什么?
【发布时间】:2009-09-11 15:13:40
【问题描述】:

我正在使用 django-compress 来处理我的 css 和 js 文件。效果很好。

我想对其他静态内容(图像、flash 等)做类似的事情。我可以为此内容设置一个远期过期,但我必须在文件更改时手动重命名它们。

有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: django


    【解决方案1】:

    最好的方法是使用带有版本的 URL 引用您的静态文件,并为您的 Web 服务器提供重写规则以忽略该版本。

    查看完整的 Django 示例 here,其中包括一个 expire_tag 助手(由 Arne Brodowski 创建):

    <link rel="stylesheet" type="text/css" 
      href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" />
    

    以及相关的Apache重写规则。

    【讨论】:

    • 现在这很漂亮。我必须记住那个。
    • 不错,小缺点是这种方法不会对 css 中引用的图像进行版本控制。
    【解决方案2】:

    使用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 实施这一点并不难。分为两部分:

    1. 使用标签(这里是useful snippet)生成将出现在 HTML 中的媒体文件的版本化 URL。版本化 URL 可以是插入版本的基本 URL,例如/media/3/header.png 实际文件在服务器上仍为 /media/header.png
    2. 使用mod_rewrite 之类的工具将传入的 URL 转换为规范值,即对/media/3/header.png 的请求被转换为/media/header.pngThis article 更详细地描述了该功能。

    【讨论】:

    • 我知道如何在图像上设置远期过期,但我想知道在编辑图像时是否有更好的处理方法。假设我的 header.png 远期到期。然后我在Photoshop中编辑它。我必须将其命名为 header1.png,然后将代码中的所有引用更改为 header1.png。不适合我。
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2014-02-24
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多