2012-01-06 4 views
0

Я пытаюсь контролировать кеширование файлов в определенном каталоге. Я хочу, чтобы время кеша по умолчанию составляло 15 минут, но я хочу, чтобы приложение изменило его, если это необходимо. Например, у меня может быть сценарий PHP, который я хочу обновлять каждые 1 минуту, поэтому я установлю заголовки управления кешем в PHP для этого скрипта. Но для всех других файлов я просто хочу, чтобы время кеша составляло 15 минут, а некоторые из них - статические файлы, поэтому я не могу просто установить время кеша по умолчанию в PHP.Добавить заголовок Apache, если он не задан приложением

настоящее время у меня это в моем Apache конфигурации:

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
    Header set Cache-Control "max-age=900" 
</Directory> 

Это прекрасно работает на 99% случаев, когда я просто хочу 15 минут кэш. Однако, если мой PHP-скрипт устанавливает заголовок управления кешем, этот параметр перезапишет его.

Я просмотрел документацию для mod_header, и ни одна из настроек (unset, add, append и т. Д.), Похоже, не дает мне то, что мне нужно.

Заранее спасибо.

ответ

1

Посмотрите на mod_expires вместо http://httpd.apache.org/docs/2.2/mod/mod_expires.html. Документы говорят, что он не будет перезаписывать заголовки, созданные РНР скрипт:

«Когда заголовок Expires уже часть ответа, генерируемого сервера, например, когда генерируется с помощью сценария CGI или прокси из - исходный сервер, этот модуль не изменяется или не добавляет заголовок кэша «Срок действия» или « ».

Ниже приведен пример конфигурации для mod_expires:

<IfModule mod_expires.c> 
    ExpiresActive on 
    ExpiresDefault A600 
    ExpiresByType image/gif "access plus 1 day" 
    ExpiresByType image/jpeg "access plus 1 day" 
    ExpiresByType image/png "access plus 1 day" 
    ExpiresByType image/x-icon "access plus 1 day" 
    <FilesMatch "\.(php|php4)$"> 
     ExpiresByType text/html "now" 
    </FilesMatch> 
</IfModule> 

Взятые из http://howto.gumph.org/content/reduce-webserver-bandwidth/

Удачи!

+0

Работал отлично. Спасибо! –

1

Согласно PHP Manual

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

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

+1

Установки, которые у меня есть в Apache, просто перезапишут все, что я установил в PHP. Так что, к сожалению, это не сработает для меня. Я уверен, что решение будет связано с конфигурацией Apache. –

Смежные вопросы