Как применить политику кэширования к определенному файлу с помощью .htaccess? - PullRequest
0 голосов
/ 16 февраля 2019

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

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
</IfModule>

И это кэширует мои CSS-файлы в течение 8 дней.Если бы я хотел кэшировать определенный файл в течение года, как бы я это сделал? Я видел этот ответ , поэтому я попытался сделать это:

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
</IfModule>

Как и в этом случае, на случай, если apache применяет правила в порядке живой очереди (<- возможно, неправильное использованиефразы): </p>

<IfModule mod_headers.c>    
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
</IfModule>

Но когда я провожу просмотр страниц по скорости страницы, политика кэширования файла bootstrap.css остается прежней.Я также очистил свой собственный кеш, открыл вкладку инкогнито и проверил политику кеширования на вкладке сети инструментов dev, а политика кеша для файла начальной загрузки по-прежнему составляет 8 дней.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019
Секции

<Files> и <FilesMatch> обрабатываются в порядке их появления в файлах конфигурации, что означает, что последний примененный файл будет иметь приоритет, поэтому ваша первая попытка должна работать:

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
</IfModule>

Я проверил это, и он работает как ожидалось:

$ curl -s -v example.com/bootstrap.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=31536000
$ curl -s -v example.com/foo.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=691200
0 голосов
/ 16 февраля 2019

Есть два способа добиться этого.Во-первых, вы упомянули здесь.Фактически, max-age - это параметр, который сообщает браузеру, через сколько секунд он должен истечь.Таким образом, вы можете рассчитать количество секунд для 1 года, которое будет равно «31557600»

Еще один простой способ - это добиться:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...