Добавить заголовки Expires для определенных изображений

Все статьи об истекающих заголовках, которые я просмотрел, дают более или менее следующее решение:

ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000

Но для меня это не имеет смысла, потому что я знаю, какие из моих изображений изменятся, а какие нет, поэтому я хочу иметь возможность добавлять определенные даты истечения срока действия для определенных файлов изображений. Как бы я это сделал?


person HandiworkNYC.com    schedule 24.03.2010    source источник


Ответы (2)


Вы можете использовать FilesMatch, например.

<FilesMatch "\.(js|css)$">
  ExpiresActive on 
  ExpiresDefault "access plus 1 month"
</FilesMatch>

Или для некоторых конкретных файлов:

<FilesMatch "^(example.js|sample.css)$">
  ExpiresActive on 
  ExpiresDefault "access plus 1 month"
</FilesMatch>
person a'r    schedule 24.03.2010
comment
Не могли бы вы привести пример того, как применить это к конкретному файлу изображения: example.jpg ? Спасибо! - person HandiworkNYC.com; 24.03.2010
comment
Спасибо за вашу помощь, очень признателен: так будет ли работать следующее? (image.jpg|anotherImage.png|backgroundImage.png|bannerImg.jpg) - person HandiworkNYC.com; 28.03.2010
comment
Добавление этого кода в мой .htaccess дало мне внутреннюю ошибку сервера 500. - person HandiworkNYC.com; 29.03.2010
comment
@a'r: я думаю, вам нужно избежать точки <FilesMatch "^(example\.js|sample\.css)$">, и, возможно, стоит добавить также Header append Cache-Control "public" подробнее: stackoverflow.com/a /10034368/260080 - person Marco Demaio; 06.04.2012

Обратите внимание, что использование ExpiresDefault для определенных файлов не будет работать, если вы уже использовали ExpiresByType. Вам нужно снова использовать ExpiresByType.

Так что это НЕ будет работать (у service-worker.js все равно будет +1 год истечения срока действия):

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault                                      "access plus 1 month"
    ExpiresByType application/javascript                "access plus 1 year"
    <FilesMatch "^(service-worker.js)$">
        ExpiresDefault                                  "access plus 0 seconds"
    </FilesMatch>
</IfModule>

Но это будет работать (у service-worker.js будет +0 секунд истечения):

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault                                      "access plus 1 month"
    ExpiresByType application/javascript                "access plus 1 year"
    <FilesMatch "^(service-worker.js)$">
        ExpiresByType application/javascript            "access plus 0 seconds"
    </FilesMatch>
</IfModule>

Вы также можете использовать Header unset Expires. Это удалит заголовок Expires независимо от того, что было установлено над ним. Вы также должны изменить (или удалить) заголовок Cache-Control. Кажется, что mod_expires устанавливает оба.

    <FilesMatch "^(service-worker.js)$">
        Header unset Expires
        Header set Cache-Control "max-age=0"
    </FilesMatch>
person Nux    schedule 29.03.2018