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


139

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

MAMPでHTTPファイルのキャッシュを防止することを示す簡単な方法はありますか?おそらく.htaccessファイルで?.htaccessMacでMAMPの仮想ホストをどこに配置または変更しますか?

回答:


318

これを試しましたか?両方で動作するはず.htaccesshttpd.confとにVirtualHost(通常に置かれhttpd-vhosts.conf、あなたのhttpd.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


2
ありがとう、これは.htaccessファイルで非常にうまく機能します。ヘッダーを検査するとキャッシュ制御オプションが表示され、リクエスト間でファイルが304ではなくhttp 200で表示されています。
dmck 2012

2
LoadModuleコマンドを追加することを忘れないでください。LoadModule headers_module lib/modules/mod_headers.so
Spenhouet 2014

拡張子を1つずつ定義する代わりに、それらのヘッダーをすべてのファイルタイプに適用できますか?
Thariq Nugrohotomo 2017年

1
@ThariqNugrohotomoはい、可能です!正規表現です。試すことができます。<filesMatch "\.+">または<filesMatch ^>
CharlieRudenstålJan

WebサーバーでMAMPではなくApacheを使用しています。「sudo a2enmod headers」と「sudo a2enmod expires」と入力して、Apacheのインストールでヘッダーと有効期限のモジュールを有効にしてから、sudoサービスのapache2を再起動する必要がありました。LoadModuleコマンドとIfModuleコマンド/タグは必要ありませんでした。上の括弧で囲まれたIfModuleタグ部分を省略し、それらの間のヘッダー設定を入力します。–
andruo11

5

ここの例に基づく: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>

残念ながら、プロジェクトディレクトリに.htaccessファイルを置くと、これは機能しません。mod_expiresがアクティブかどうかはわかりません。
dmck 2012

5
@dmck:<IfModule mod_expires.c>and </IfModule>セクションを削除します.. mod_expiresが有効になっていない場合、これらのディレクティブが静かに無視される代わりに、エラーが発生します。
ステニー

プロジェクトディレクトリでわずかな構文エラーが発生すると、500エラーが発生する可能性があります。
SDsolar 2017年

3

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

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


3
これは、サーバー側のPHPキャッシュ、つまりOPCacheに関するものです。問題は、HTTP経由で要求されたブラウザーによってキャッシュされているファイルについてです。
Flion 2016年

2

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、URLは次のようになります。

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

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

編集

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


ありがとう、残念ながら私はPHPファイルを使用していません。mod_headersを調べ、mod_expiresをインストールします。
dmck 2012

CSSファイルのキャッシュを防ぐにはどうすればよいですか?
アーロンフランケ

1
<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>

それは良い品質の答えではありません。OPで報告された問題を解決するための手順を詳しく説明してください。
レオパル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.