Я провел более 100 ответов здесь, много, чтобы попробовать, НИЧЕГО работать?
У вас есть сайт на PHP. Мне нужно кэшировать OFF для всех .php-файлов EXCEPT A SELECT FEW.
Итак, в .htaccess у меня есть следующее:
ExpiresActive On # Eliminate caching for certain dynamic files <FilesMatch "\.(php|cgi|pl)$"> ExpiresDefault A0 Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform" Header set Pragma "no-cache" </FilesMatch>
Используя Firebug, я вижу следующее:
Cache-Control no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform Connection Keep-Alive Content-Type text/html Date Sun, 02 Sep 2012 19:22:27 GMT Expires Sun, 02 Sep 2012 19:22:27 GMT Keep-Alive timeout=3, max=100 Pragma no-cache Server Apache Transfer-Encoding chunked X-Powered-By PHP/5.2.17
Эй, отлично!
НО, у меня есть пара страниц .php Мне нужно очень короткое кеширование.
Я думал, что простой ответ заключался в том, что он добавлен в самую верхнюю часть каждой php-страницы, в которой я хочу включить кеширование:
<?php header("Cache-Control: max-age=360"); ?>
Неа.
Затем я попробовал различные версии выше. Неа.
Затем я попробовал варианты мета-эквивалентов. Неа.
Затем я попробовал варианты кода .htaccess вместе с приведенными выше вариантами, такими как ограничение:
# Eliminate caching for certain dynamic files <FilesMatch "\.(php|cgi|pl)$"> Header set Cache-Control "no-cache, max-age=0" </FilesMatch>
Неа.
Кажется, что я ничего не делаю, позволяя использовать один .php для кэша с кодом .htaccess, не удаляя все инструкции из файла .htaccess.
Где я иду не так? Что мне нужно сделать, чтобы отдельные страницы php могли быть кэшируемыми, а остальные останутся?
Спасибо за любые мысли.
Ну, видимо, у этого нет ответа. Итак, мое решение на этом этапе состоит в том, чтобы полностью исключить код .htaccess и применять явные заголовки к каждому файлу. Боль в тебе-знаешь-что, но пришло время двигаться дальше. Если у кого-то есть более элегантное решение, которое может работать с .htaccess по умолчанию, пожалуйста, не стесняйтесь делиться … спасибо
Поэтому я знаю, что опаздываю. Может быть, слишком поздно. но я столкнулся с симуляцией проблемы, и я решил поделиться своим решением.
В основном, я превратил ExpiresActive Off для каждого файла, который я не хотел кэшировать (или имел разные времена кеширования, чем мои статические ресурсы). Это выглядело примерно так:
ExpiresActive On <FilesMatch "\.(php|cgi|pl)$"> # This makes sure that no cache headers can be set, # but does not generate an error when trying to. ExpiresActive Off </FilesMatch> # Your normal caching here ExpiresDefault "access plus 1 month"
Теперь в вашем PHP-скрипте вы сможете вставлять заголовки кеширования, не перезаписывая ваш файл .htaccess, точно так же, как вы делали
<?php header('Expires: ' . gmdate('D, d MYH:i:s', time() + 360) . ' GMT'); ?>
Надеюсь, это было полезно.
Этот ответ имел решение для меня: https://stackoverflow.com/a/4521120/2685496
Мало ли я знаю, что session_start();
по умолчанию перезаписывает заголовки Cache-Control и Expires со значениями, чтобы гарантировать, что страница не кэшируется.
Вы можете использовать session_cache_limiter('public');
перед session_start();
, как предлагает Марцин, или вы можете просто поместить свой header();
утверждения после session_start();
,