MAMPで単一ページのJavascriptアプリケーションを開発しています。 JavaScriptとHTMLテンプレートファイルがリクエスト間でキャッシュされています。
Httpファイルのキャッシュを防止したいことをMAMPで示す簡単な方法はありますか?おそらく.htaccess
ファイルを使用していますか? Macの.htaccess
を配置したり、MAMPの仮想ホストを変更したりするにはどうすればよいですか?
これを試しましたか? .htaccess
、httpd.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
以外の拡張子を使用している場合、取得するテンプレートファイルの拡張子を追加します。
ここの例に基づいて: 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>
私は同じ問題を抱えていましたが、ここで良い解決策を見つけました: MAMPでPHP 5.5.3のキャッシュを停止します
基本的にphp.iniファイルを見つけて、OPCache行をコメント化します。この別の答えが他の人にも役立つことを願っています。
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ヘッダーを直接設定できます。