web-dev-qa-db-ja.com

Apache httpd(MAMP)でhttpファイルのキャッシュを防ぐ方法

MAMPで単一ページのJavascriptアプリケーションを開発しています。 JavaScriptとHTMLテンプレートファイルがリクエスト間でキャッシュされています。

Httpファイルのキャッシュを防止したいことをMAMPで示す簡単な方法はありますか?おそらく.htaccessファイルを使用していますか? Macの.htaccessを配置したり、MAMPの仮想ホストを変更したりするにはどうすればよいですか?

130
dmck

これを試しましたか? .htaccesshttpd.conf、およびVirtualHost(httpd.confからインクルードしている場合は通常httpd-vhosts.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以外の拡張子を使用している場合、取得するテンプレートファイルの拡張子を追加します。

297

ここの例に基づいて: 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>
5
Frank Farmer

私は同じ問題を抱えていましたが、ここで良い解決策を見つけました: MAMPでPHP 5.5.3のキャッシュを停止します

基本的にphp.iniファイルを見つけて、OPCache行をコメント化します。この別の答えが他の人にも役立つことを願っています。

3
acarito

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ファイルのキャッシュを防ぐには、js urlの末尾に?rd=45642111のようなrandomトークンを使用できます。そのため、URLは次のようになります。

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

ページ上のこのURLがPHPファイルによって生成されている場合、PHPでランダム部分を追加するだけです。ランダムなクエリ文字列パラメーターを追加するだけでURLをランダム化するこの方法は、たとえば、ajax jQueryリクエストのno-cache設定の基本的なものです。ブラウザは、異なるクエリ文字列を持つ2つのURLが同じであるとは決して見なさず、キャッシュされたバージョンを使用することもありません。

編集

テストmod_headersを行う必要があることに注意してください。 mod_headersがある場合は、HeaderキーワードでExpiresヘッダーを直接設定できます。

2
regilero