4


次のようなCSSファイルを含めると、現在キャッシュバスティングを使用している私の状況:

echo "<link href='stylesheet.css?" . filemtime('stylesheet.css') . "' />"

私の目標
今度は、CSS ファイル内に含める画像に対して同様のことをしたいと思います。

問題
問題は、CSS ファイル内で PHP を使用できず、CSS ファイルを分離したままにしておくことです。

私の質問
filemtime()ファイルを分離したまま、CSS ファイル内の画像に を追加するにはどうすればよいですか?


編集
Far Future Expires ヘッダーを使用してファイルをキャッシュしたいと思います。

4

2 に答える 2

3

css ファイルの名前を実際に style.css.php に変更し、その中で PHP を使用することができます。後処理結果が適切な CSS 形式である限り、動作するはずです。私は過去にそれをやったことがあります。必要かどうかはわかりませんが、それで問題が発生する場合は、header('Content-type...') のようなものを使用して、CSS ファイルとして送信するようにしてください。

于 2011-03-04T16:07:12.153 に答える
2

cache-bustingを実現する最善の方法は、適切なヘッダーを送信することです。Expires: nowヘッダーを送信するように Apache が構成されていることを確認します。したがって、.htaccss ファイルでは次のようになります。

Header always set Cache-Control "no-store, no-cache, must-revalidate"
Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT"

これにより、そのディレクトリとその下のすべてのコンテンツが常に強制的にキャッシュされなくなります。

ただし、条件付きでキャッシュする場合は、次のいずれかを行うことをお勧めします。

  1. CSS ファイルの名前にバージョン番号を含めます。mycss.1.cssしたがって、次のようなファイルができますmycss.2.css。両方のファイル名を調整する必要があるため、これにはもう少し作業が必要です。ただし、PHP を使用してファイルを送信しない (リソース ヒットがない) ため、CDN を使用でき (さらに優れています)、さらに遠い将来の有効期限ヘッダーを利用できるため、より優れています。

  2. Cache-Control: must-revalidateヘッダーと適切なE-Tagヘッダーを設定して304 Not Modified、コンテンツが変更されていない場合にヘッダーを送信するだけで済むようにします...

于 2011-03-04T17:18:02.627 に答える