2012-01-06 20 views
0

特定のディレクトリ内のファイルのキャッシュを制御しようとしています。私はデフォルトのキャッシュ時間を15分にしたいが、必要に応じてアプリケーションがそれを変更できるようにしたい。たとえば、1分ごとにリフレッシュしたいPHPスクリプトがあるかもしれないので、そのスクリプト用にPHP内にキャッシュ制御ヘッダーを設定します。しかし、他のすべてのファイルについては、キャッシュ時間を15分にしたいものもありますが、そのうちのいくつかは静的ファイルなので、PHPでデフォルトのキャッシュ時間を設定することはできません。アプリケーションによって設定されていない場合はApacheヘッダーを追加してください。

私は現在、私のApacheの設定でこれを持っている:

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

これは私がちょうど15分のキャッシュをしたい場合、99%のための素晴らしい作品。しかし、PHPスクリプトがキャッシュコントロールヘッダーを設定している場合、この設定は上書きされます。

私はmod_headerのドキュメントを見てきましたが、設定(未設定、追加、追加など)が必要なものを与えてくれないようです。

ありがとうございます。

答えて

1

代わりにmod_expiresを見てみましょうhttp://httpd.apache.org/docs/2.2/mod/mod_expires.html。ドキュメントは、それはあなたのPHPスクリプトによって作成されたヘッダを上書きしませんと言う:

「CGIスクリプトによって生成されるか、またはからプロキシたときにヘッダには、例えば、すでに サーバーによって生成された応答の一部であり、期限切れになったときの オリジンサーバーでは、このモジュールは変更されず、Expiresまたは Cache-Controlヘッダーが追加されません。ここで

mod_expiresをするための例の設定です:

http://howto.gumph.org/content/reduce-webserver-bandwidth/

幸運から撮影

<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> 

+0

完璧に作業しました。ありがとうございました! –

1

PHPマニュアル

<?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の設定を伴わなければならないと確信しています。 –

関連する問題