Я разрабатываю одностраничное приложение Javascript в MAMP. Мои файлы шаблонов JavaScript и HTML кэшируются между запросами.
Есть ли простой способ указать в MAMP, что я хочу предотвратить кеширование http файлов? Возможно, с файлом .htaccess
? Где разместить .htaccess
или изменить виртуальный хост для MAMP на Mac?
Пробовал это? Должен работать как в .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 использует заголовок Cache-Control: private, x-gzip-ok = "" > , чтобы предотвратить кеширование объявлений прокси и клиентами.
От http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html
И дополнительно добавьте расширение для файлов шаблонов, которые вы извлекаете, если для них используется расширение, отличное от .html
.
На основе приведенного здесь примера: http://drupal.org/node/550488
Возможно, будут работать следующие .htaccess
<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>
<IfModule mod_expires.c>
и </IfModule>
.. если mod_expires не включен, вы получите сообщение об ошибке вместо тихого игнорирования этих директив.
У меня была такая же проблема, но я нашел здесь хорошее решение: Остановить кеширование для 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, просто добавляя случайные параметры строки запроса, является базовым вариантом настройки no-cache для ajax jQuery-запроса, например. Браузер никогда не будет считать, что 2 URL-адреса, имеющие разные строки запросов, будут одинаковыми и никогда не будут использовать кешированную версию.
ИЗМЕНИТЬ
Обратите внимание, что вы должны проверить alos mod_headers. Если у вас есть mod_headers, вы можете установить заголовки Expires напрямую с ключевым словом Header.
FWIW Мне пришлось перезапустить php-fpm до того, как изменение вступило в силу. Перезапуск Apache был недостаточным. Потянул мои волосы на некоторое время над этим.
LoadModule headers_module lib/modules/mod_headers.so