Последнее изменение не работает для .htaccess - PullRequest
3 голосов
/ 21 октября 2010

Я пытаюсь реализовать кэширование в браузере и следовать рекомендации Google PageSpeed ​​по настройке Last-Modified для данных, которые «достаточно далеко в прошлом» В моем .htaccess есть следующее:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  Header Set Last-Modified "Fri, 01 Jan 2010 12:00:00 GMT"
 </FilesMatch>
</IfModule>

На моем сервере установлены mod_headers.

К сожалению, Google PageSpeed ​​все еще жалуется и предупреждает меня:

Leverage browser caching

The following cacheable resources have a short freshness lifetime. Specify an expiration at least one week in the future for the following resources:

А затем перечисляет PNG, GIF, JPG и т. Д. Yahoo YSlow говорит в основном то же самое.

Глядя на заголовки ответов одного из моих ресурсов, которые должны кэшироваться, я вижу это:

Date:           Tue, 19 Oct 2010 20:12:04 GMT
Server:         Apache/2.2.14 (Ubuntu)
Last-Modified:  Tue, 07 Sep 2010 23:51:33 GMT
Etag:           "2e0e34-2a43-48fb413a96a20"
Accept-Ranges:  bytes
Content-Length: 10819
Content-Type:   image/png

Как видите, данные последнего изменения не соответствуют тому, что я указал в .htaccess.

Есть идеи, что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 07 апреля 2012

Удаление Last-Modified - это не то, что запрашивает Google PageSpeed.Он хочет видеть следующие заголовки в ответе вашего сервера, когда браузер запрашивает статические файлы:

Cache-Control max-age=...
Expires ...

вместо точек сервер будет помещать значения.просто нужно добавить к .htaccess следующие строки:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
 </FilesMatch>
</IfModule>

Вы увидите, что Google PageSpeed ​​перестанет жаловаться.

2 голосов
/ 21 октября 2010

Рассматривали ли вы просто использование unset Last-Modified?

Пример:

<IfModule mod_headers.c>
 <FilesMatch "\.(json|pdf|swf|bmp|gif|jpeg|jpg|png|svg|tiff|ico|flv|js)$">
  Header unset Last-Modified
 </FilesMatch>
</IfModule>

Секция FilesMatch выглядит хорошо, так что, вероятно, это просто какой-то трепетный бит с набором заголовков.Черт, может быть даже чувствителен к регистру.Попробуйте Header set вместо Header Set

Если это не то, что вы хотите, то дайте мне знать, и я подумаю об этом немного больше.Unset должен работать, хотя,

0 голосов
/ 18 апреля 2014

Это работает:

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
</IfModule>
...