5

私はここで100以上の答えを経験してきました。

PHP ベースのサイトがあります。SELECT FEW を除くすべての .php ファイルのキャッシュをオフにする必要があります。

したがって、.htaccessには次のものがあります。

ExpiresActive On
# Eliminate caching for certain dynamic files
<FilesMatch "\.(php|cgi|pl)$">
ExpiresDefault A0
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>

Firebug を使用すると、次のように表示されます。

Cache-Control   no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform
Connection  Keep-Alive
Content-Type    text/html
Date    Sun, 02 Sep 2012 19:22:27 GMT
Expires Sun, 02 Sep 2012 19:22:27 GMT
Keep-Alive  timeout=3, max=100
Pragma  no-cache
Server  Apache
Transfer-Encoding   chunked
X-Powered-By    PHP/5.2.17

ねえ、すてきですね!

しかし、非常に短いキャッシュが必要な .php ページがいくつかあります。

簡単な答えは、キャッシュを有効にしたい各phpページの一番上にこれを追加することだと思いました:

<?php header("Cache-Control: max-age=360"); ?>

いいえ。

次に、上記のさまざまなバージョンを試しました。いいえ。

次に、メタ http-equiv のバリエーションを試しました。いいえ。

次に、上記のバリエーションに加えて、次のように制限するなど、.htaccess コードのバリエーションを試しました。

# Eliminate caching for certain dynamic files
<FilesMatch "\.(php|cgi|pl)$">
Header set Cache-Control "no-cache, max-age=0"
</FilesMatch>

いいえ。

.htaccessファイルからステートメントを完全に削除する以外に、.htaccessコードを使用して単一の.phpをキャッシュ可能にすることはできないようです。

どこが間違っていますか?個々の php ページをキャッシュ可能にし、残りをオフにするにはどうすればよいですか??

ご意見ありがとうございます。

4

3 に答える 3

3

まあ、どうやらこれには答えがありません。したがって、この時点での私の解決策は、.htaccessコードを完全に削除し、各ファイルに明示的なヘッダーを適用することです。あなたが知っていることの痛みですが、次に進む時が来ました。誰かが.htaccessのデフォルトで動作することができるよりエレガントなソリューションを持っているなら、気軽に共有してください...ありがとう

于 2012-09-10T16:50:37.973 に答える
3

だから私は遅れていることを知っています.. 多分遅すぎる. しかし、似たような問題に遭遇したので、解決策を共有したいと思いました。

基本的に、キャッシュしたくない (または静的リソースとは異なるキャッシュ時間を持つ) すべてのファイルに対して ExpiresActive をオフにしました。それは次のように見えました:

ExpiresActive On

<FilesMatch "\.(php|cgi|pl)$">

  # This makes sure that no cache headers can be set,
  # but does not generate an error when trying to.
  ExpiresActive Off

</FilesMatch>

# Your normal caching here
ExpiresDefault "access plus 1 month"

PHPスクリプトで、.htaccessファイルによって上書きされることなく、キャッシュヘッダーを挿入できるはずです。

<?php header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 360) . ' GMT'); ?>

これがお役に立てば幸いです。

于 2015-05-09T23:30:46.617 に答える
1

この答えには解決策がありました:https://stackoverflow.com/a/4521120/2685496

session_start();デフォルトで Cache-control および Expires ヘッダーを値で上書きして、ページがキャッシュされないようにすることを私はほとんど知りませんでした.

Marcin が示唆するようsession_cache_limiter('public');に beforeを使用することも、単にステートメントを afterに置くこともできます。session_start();header();session_start();

于 2017-03-22T09:48:58.843 に答える