web-dev-qa-db-ja.com

.htaccess:「キャッシュバリデータを指定する」方法

私は自分のサイトでGoogle PageSpeedを実行していますが、
「キャッシュ検証ツールを指定してください。」

次のリソースにはキャッシュ検証ツールがありません。キャッシュ検証を指定しないリソースは、効率的に更新できません。 Last-ModifiedまたはETagヘッダーを指定して、次のリソースのキャッシュ検証を有効にします。

...次に、画像、CSS、JSなどをリストします。

http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching によると:

最終変更日を、リソースが最後に変更された日付に設定します。 Last-Modified日付が過去に十分に遠い場合、ブラウザが再取得しない可能性があります。

.htaccessに次のものがあります。

<IfModule mod_headers.c>
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$">
        Header set Last-Modified "Tue, 31 Aug 2010 00:00:00 GMT"
    </FilesMatch>
</IfModule>

私は何を間違えていますか?

23

あなたが抱えている問題は、Expire:ではなくLast-Modified:にあると思います。 Apacheはデフォルトで、ファイルの日付に基づいてファイルLast-Modified:ヘッダーを送信します。上位のコードを削除して、次のコードに置き換えることをお勧めします。

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 year"
</IfModule>

それで試してください、それがうまくいかなかった場合、これも追加してみてください:

<IfModule mod_headers.c>
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$">
        Header set Last-Modified "Mon, 31 Aug 2009 00:00:00 GMT"
    </FilesMatch>
</IfModule>
16
aularon

「キャッシュバリデータを設定する」ためには、ヘッダーで以下を送信する必要があります。

ExpiresまたはCache-Control: max-age

[〜#〜] and [〜#〜]

Last-ModifiedまたはETag

したがって、たとえば、PHPでは、CSSファイルとJSファイルに以下を追加できます。

<filesMatch "\.(js|css)$">
    Header set Expires "Thu, 21 May 2013 20:00:00 GMT"
    Header set Last-Modified "Thu, 21 May 2012 20:00:00 GMT"
</filesMatch>

これは、GoogleのPagespeed計算機を満足させます。

6
Chuck Le Butt

上記のすべてのコードをテストしましたが、gtmetrixランクに変化はありません。 my wordpress=サイトのこの改善されたCache-Control(キャッシュバリデータを指定)ランクを使用

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access plus 1 year"
</IfModule>
## EXPIRES CACHING ##

<ifModule mod_headers.c>
  <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </filesMatch>

  <filesMatch "\\.(xml|txt)$">
    Header set Cache-Control "max-age=216000, public, must-revalidate"
  </filesMatch>

  <filesMatch "\\.(html|htm|php)$">
    Header set Cache-Control "max-age=1, private, must-revalidate"
  </filesMatch>
</ifModule>

自分のサイトとファイルのmax-age値をカスタマイズすることをお勧めします。

2
Morteza Ziyae