web-dev-qa-db-ja.com

キャッシュをクリアせずにリダイレクトするページを開きます

リダイレクトするindex.htmlページがあるWebサイトを引き継ぎました。このページはキャッシュされます。明らかにブラウザのキャッシュを完全にクリアすることで問題は解決します。 mysite.comに直接アクセスし、キャッシュを完全にクリアせずに新しいページを取得する方法を教えてください。

私はページをリロードするときにシフトを保持することに似たものを探していますが、今回はページを最初に開くときだけです。

2
LanceH

正常に動作するWebブラウザーは、キャッシュされたコンテンツを見つけると、通常、キャッシュされたドキュメントのhead部分を引き続き要求し、コンテンツが最後にキャッシュされてから変更されていないことを確認します。 last-modifiedまたはcontent-lengthが変更される限り、問題は発生しません。

問題は、Webサーバーがインデックスページを大量にキャッシュするようにWebブラウザーに明示的に指示した場合、またはその間にプロキシサーバーがある場合に発生します。

index.htmlページは既に変更されていますが、一部のユーザーはまだリダイレクトしていますか?

2
Mark Henderson

ユーザーがページを読み込むたびに、そのページにキャッシュ対策ヘッダーを送信するだけです。これにより、ブラウザは毎回ページの新しいコピーを取得します。これは、サイト内の他のページのキャッシュに影響を与えることなく行うことができます。

メタタグを使用できます:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="Expires" CONTENT="-1"> 

PHPでhttpヘッダーを送信します(ApacheにファイルをPHPとして解析するよう指示する必要があります)

Header( "Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT" );
Header( "Expires: Sat, 26 Jul 1997 05:00:00 GMT" );
Header( "Cache-Control: no-store, no-cache, must-revalidate" ); 
Header( "Cache-Control: post-check=0, pre-check=0", FALSE );
Header( "Pragma: no-cache" ); 

Apache .htaccessで

<FilesMatch "index.html$">
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 "Sat, 26 Jul 1997 05:00:00 GMT"
</IfModule>
</FilesMatch>
2
John Conde

既存のindex.htmlファイルの名前を、index.htmdefault.htmldefault.htm、またはindex.phpなどの別のデフォルトのディレクトリインデックスファイル名に変更できますか?これは、人々がindex.htmlをキャッシュしてhttp://www.example.com/index.htmlにアクセスした場合には役に立ちませんが、http://www.example.com/に直接アクセスした場合には役立ちます。

0
Josh