Переопределение заголовка кэша PHP

Я провел более 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(); ,