Htaccess last modified: Как поставить Last-modified в .htaccess? — Хабр Q&A

Настройка кеширования через .htaccess

  • Объяснение Last-modified, Etag, Expired, Cache-control

  • Проверка инструментом Pagespeed

Включение динамического gzip-сжатия — через mod_deflate, статического — необходимо подготовить сжатые версии файлов и с помощью .htaccess подменять на лету реальные файлы сжатыми:

.htaccess
# Перенаправление на gzip файлы
AddEncoding gzip .gz
<filesMatch "\.js.gz$">
  ForceType text/javascript  
  Header set Content-Encoding: gzip
</filesMatch>
 
<filesMatch "\.js$">
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule (.*)\.js$ $1\.js.gz [L]
  ForceType text/javascript
</filesMatch>
 
<filesMatch "\.css.gz$">
  ForceType text/css
  Header set Content-Encoding: gzip
</filesMatch>
 
<filesMatch "\.css$">
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} !".
*Safari.*" RewriteCond %{HTTP:Accept-Encoding} gzip RewriteCond %{REQUEST_FILENAME}.gz -f RewriteRule (.*)\.css$ $1\.css.gz [L] ForceType text/css </filesMatch>

Взято отсюда

Обычный .htaccess файл по принципу «все включено»:

.htaccess
# Cache-Control
<ifModule mod_headers.c>
# 30 дней
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
 
# 30 дней
<filesMatch "\.(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
 
# 2 дня
<filesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</filesMatch>
 
</ifModule>
 
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
 
<IfModule mod_deflate.
Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule> </IfModule>

Проверка включения сжатия:

 curl -H "Accept-Encoding: gzip,deflate" --head http://mysite.ru

Должен отдаваться заголовок:

Content-Encoding: gzip

Как увеличить скорость загрузки сайта средствами .htaccess

Одной из важных характеристик сайта является скорость загрузки. Каким бы функциональным, красивым и информационно наполненным сайт ни был, если страницы сайта открываются по 5-10 секунд, постоянных посетителей у сайта не будет. Найдутся подобные, но работающие быстрее, сайты. И к тому же медленный сайт будет хуже «выдаваться» в поиске, ведь с недавних пор скорость загрузки сайтов стала одним из параметров поискового алгоритма Google.

Для оценки скорости загрузки сайта обычно пользуются плагинами браузера или специальными онлайн сервисами. Из плагинов для браузера отмечу Page Speed для Firefox.

Вы можете потратить кучу времени на оптимизацию движка вашего сайта, а тем временем существует простой и быстрый способ ускорить загрузку сайта, а кроме того сэкономить на трафике. Нужно просто сделать соответствующие настройки веб-сервера apache. Для этого необязательно иметь доступ к конфигам апача, достаточно будет файла

.htaccess.

Включаем сжатие.

Для включения сжатия файлов с расширениями *.css, *.js, *.html, *.html, *.xhtml, *.php добавляем в .htaccess следующие строки.

<IfModule mod_deflate.c>
  <FilesMatch "\.(css|js|x?html?|php)$">
    SetOutputFilter DEFLATE
  </FilesMatch>
</IfModule>
Включаем кэширование.

Добавляем время жизни для файлов:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 3600 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 604800 seconds"
  ExpiresByType text/html "access plus 3600 seconds"
  ExpiresByType application/xhtml+xml "access plus 3600 seconds"
</IfModule>

Добавляем управляющие команды для кэширущих систем (теперь на всех публичных кэширующих системах картинки будут кешироваться в течении 1 месяца, а файлы стилей и javascript — в течении недели).

<IfModule mod_headers.c>
  <FilesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\.(css)$">
    Header set Cache-Control "max-age=604800, public"
  </FilesMatch>
  <FilesMatch "\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </FilesMatch>
  <FilesMatch "\.(x?html?|php)$">
    Header set Cache-Control "max-age=3600, private, must-revalidate"
  </FilesMatch>
</IfModule>

Теперь при последовательном просмотре вашего сайта не будут загружаться ранее загруженные таблицы стилей, изображения и файлы с javascript.

Выключаем проверку объектных тегов ETag.

Объектные теги Etag — это механизм проверки на наличие новой версии кэшированного файла. Если удалить заголовок ETag, то браузеры и кэширующие сервера не будут проверять наличие новых версий кэшированных файлов. Т.е. они будут полагаться только на заголовки Cache-Control и Expires. Для html-страниц не рекомендуется отключать ETag. Ниже приведены строки, которые нужно добавить в .htaccess:

<ifModule mod_headers.c>
  <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
    Header unset ETag
    FileETag None
 </filesMatch>
</ifModule>
Удаляем заголовок Last-Modified.

Кроме того, можно удалить запросы браузера If-Modified-Since и If-None-Match, а также ответы на них 304 Not Modified. Это можно сделать добавив следующие строки:

<ifModule mod_headers.c>
  Header unset Last-Modified
</ifModule>

Удаление заголовка Last-Modified приводит к тому, что проверка на измененное содержание не осуществляется до тех пор пока об этом не объявит заголовок Expires.

Добавив все вышеперечисленное в файл .htaccess вы увеличите скорость загрузки вашего сайта и уменьшите трафик.

По материалам статей: 20+ правил .htaccess, которые должен знать каждый разработчик и Оценка скорости загрузки сайта.

28 мая 2010 Дмитрий в рубрике вебдев . Темы: apache, оптимизация | [4]

Поделиться в FacebookДобавить в TwitterДобавить в Telegram
Оставить комментарий

apache — Last-Modified не работает для .htaccess

Задавать вопрос

спросил

Изменено 9 лет, 2 месяца назад

Просмотрено 15 тысяч раз

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

 
 
  Последнее изменение набора заголовков "Пт, 01 января 2010 г. , 12:00:00 по Гринвичу"
 

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

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

 Использовать кеширование браузера
Следующие кэшируемые ресурсы имеют короткий срок действия. Укажите срок действия как минимум через одну неделю для следующих ресурсов:
 

А затем список PNG, GIF, JPG и т. д. Yahoo YSlow говорит в основном то же самое.

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

 Дата: вторник, 19 октября 2010 г., 20:12:04 по Гринвичу.
Сервер: Apache/2.2.14 (Ubuntu)
Последнее изменение: вторник, 07 сентября 2010 г., 23:51:33 GMT
Метка: "2e0e34-2a43-48fb413a96a20"
Допустимые диапазоны: байты
Длина содержимого: 10819
Тип содержимого: изображение/png
 

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

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

  • apache
  • . htaccess
  • заголовок
  • http-заголовки
  • httpd.conf

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

 Cache-Control max-age=...
Истекает...
 

вместо точек сервер расставит значения.

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

 
 
  ExpiresActive On
  ExpiresDefault "доступ плюс 1 год"
  Заголовок добавляет Cache-Control "public"
 

 

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

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

Пример:

 
 
  Заголовок удален Last-Modified
 

 

Раздел FilesMatch выглядит нормально, так что, вероятно, это просто некоторая возня с набором заголовков. Черт, может быть, даже с учетом регистра. Попробуйте Набор заголовков вместо Набор заголовков

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

4

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

 
# Включить истечение срока действия
ExpiresActive On
# Директива по умолчанию
ExpiresDefault "доступ плюс 1 месяц"
# Мой фавикон
ExpiresByType image/x-icon "доступ плюс 1 год"
# Изображений
ExpiresByType image/gif "Доступ плюс 1 месяц"
ExpiresByType image/png "доступ плюс 1 месяц"
ExpiresByType image/jpg "Доступ плюс 1 месяц"
ExpiresByType image/jpeg "Доступ плюс 1 месяц"
# CSS
ExpiresByType text/css "доступ 1 месяц"
# Джаваскрипт
Приложение ExpiresByType/javascript "доступ плюс 1 год"

 
1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

.htaccess — проблема кэширования htaccess «Заголовок удален последним изменением»

Задавать вопрос

спросил

Изменено 4 года, 11 месяцев назад

Просмотрено 13 тысяч раз

Я пытаюсь настроить некоторые параметры управления кешем в файле htaccess.

На данный момент это выглядит так:

 
Заголовок установил Cache-Control "max-age=2592000, public, must-revalidate"
ETag заголовка не установлен
FileETag Нет

 

Однако я читал (и хотел добавить) о том, что заголовок не установлен Last-Modified, поэтому это будет что-то вроде:

  (flv|gif|jpg|jpeg|png|ico|swf|css|js |html|pdf)$">
Заголовок установил Cache-Control "max-age=2592000 г., публичный, необходимо подтвердить"
Заголовок удален Last-Modified
ETag заголовка не установлен
FileETag Нет

 

Однако при использовании этого (согласно Firebug) вообще ничего не загружается из кеша (в то время как первый метод загружает все)

Я делаю что-то не так? Синтаксис вроде правильный.

A.

  • .htaccess
  • кэширование
  • последнее изменение

Синтаксис правильный, но использование — нет. Согласно «Советам по скорости: удалить заголовок Last-Modified», найденному здесь: http://www.askapache.com/htaccess/apache-speed-last-modified.html

Если вы удалите заголовок Last-Modified и ETag, вы полностью устраните запросы If-Modified-Since и If-None-Match и их ответы 304 Not Modified, поэтому файл будет оставаться в кэше без проверки обновлений до тех пор, пока заголовок Expires не укажет доступен новый контент!

Также:

При удалении заголовков ETag и Last-Modified из ваших статических файлов (изображений, javascript, css) браузеры и кэши не смогут проверить кешированную версию файла по сравнению с реальной версией.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *