SOの答え で示唆されているように、JSとCSSファイルでバージョン番号を使用しようとしているので、ブラウザでJSまたはCSSバージョン番号が変更されたときにのみリクエストが行われますPHPファイル。これを容易にするために、httpd.conf
のような要求されたファイルをmyscript--20140904.js
に変換するmyscript.js
を書き換えます。この方法で作業しているので、バージョン番号が更新されると「別の」ファイルの要求が表示されるため、ブラウザーに長時間ファイルをキャッシュしてもらいたいです。
Webmasters.SEに対する回答 によると、FilesMatch
をHeader set Cache-Control
と一緒に使用して、CSS/JSファイルのバージョン番号のみをキャッシュできます。
そして、 SOの答え によれば、Cache-Control
のみが必要です。それはExpires
より優先されるからです。
しかし、これは機能していません。 Cache-Control
ヘッダーフィールドが応答にありません。
Apacheの設定は次のとおりです。
RewriteEngine on
RewriteRule ^(.*)\-\-.+\.(css|js)$ $1.$2
<IfModule mod_headers.c>
<FilesMatch "^(.*)\-\-.+\.(js|css)$">
Header set Cache-Control "max-age=15552000"
Header unset ETag
Header unset Last-Modified
</FilesMatch>
</IfModule>
# <IfModule mod_expires.c>
# <FilesMatch "\.(js|css)$">
# ExpiresActive On
# ExpiresByType text/javascript "access plus 6 months"
# ExpiresByType text/css "access plus 6 months"
# </FilesMatch>
# </IfModule>
JSファイルの1つに対するリクエストは次のとおりです。
http://localhost/[url]/common.js
GET [url]/common.js HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost/[refererUrl]
Cookie: PHPSESSID=[cookie]
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK
Date: Thu, 04 Sep 2014 19:45:32 GMT
Server: Apache
Last-Modified: Wed, 03 Sep 2014 22:55:57 GMT
Etag: [etag]
Accept-Ranges: bytes
Content-Length: 5167
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/javascript
<FilesMatch "^(.*)\-\-.+\.(js|css)$">
FilesMatch
はfilenameを取り、URLではなくファイルシステムと一致します。基礎となるファイルはまだ「myscript.js」と呼ばれているため、このパターンは次のようになります:\.(js|css)$
(さておき...あなたのサンプルリクエストはcommon.js
に向けられているようです-これはあなたのパターンにマッチしなかったでしょう-これはcommon--20140904.js
に向けられるべきではありませんか?)