Как предотвратить кэширование файлов http в Apache httpd (MAMP)

Я разрабатываю одностраничное приложение Javascript в MAMP. Мои файлы шаблонов JavaScript и HTML кэшируются между запросами.

есть ли простой способ указать в MAMP, что я хочу предотвратить кэширование файлов http? Возможно, с ? Где я могу разместить .htaccess или изменить виртуальный хост для MAMP на Mac?

4 ответов


пробовал? Должен работать в обоих .htaccess, httpd.conf и VirtualHost (обычно помещаемых в httpd-vhosts.conf если вы включили его из своего httpd.conf)

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

100% запретить кэширование файлов

это похоже на то, как google ads используют кэш-контроль заголовка: private, x-gzip-ok="">, чтобы предотвратить кэширование объявлений прокси и клиентами.

от http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

и при необходимости добавьте расширение для файлов шаблонов, которые вы извлекаете, если вы используете расширение, отличное от .html для тех, кто.


на основе примера здесь:http://drupal.org/node/550488

вероятно, будет работать следующее .реврайт

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>

У меня была такая же проблема, но я нашел здесь хорошее решение : остановить кэширование для PHP 5.5.3 в MAMP

в основном найти php.ini-файл и закомментируйте строки OPCache. Я надеюсь, что этот альтернативный ответ поможет и другим.


без mod_expires будет сложнее установить заголовки истечения срока действия в ваших файлах. Для всего, что сгенерировано, вы можете установить некоторые заголовки по умолчанию в ответе, выполняя работу mod_expires так:

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(взято из: ответ переполнения стека от @brianegge, где также объясняется решение mod_expires)

это не будет работать для статические файлы, как ваши файлы javascript. Что касается статических файлов, то только apache (без модуля истечения срока действия) между браузером и исходным файлом. Чтобы предотвратить кэширование файлов javascript, которое выполняется в вашем браузере, вы можете использовать случайный маркер в конце url-адреса js что-то вроде ?rd=45642111, поэтому url выглядит так:
<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

Если этот url на странице генерируется PHP-файлом, вы можете просто добавить случайную часть с PHP. Этот способ рандомизации url-адреса путем простого добавления случайных параметров строки запроса является базовой вещью upôn например, параметр no-cache запроса ajax jQuery. Браузер никогда не будет считать 2 url, имеющих разные строки запроса, одинаковыми и никогда не будет использовать кэшированную версию.

редактировать

обратите внимание, что вы должны ALOS test mod_headers и. Если у вас есть mod_headers, вы можете установить заголовки Expires непосредственно с помощью заголовок ключевое слово.