web-dev-qa-db-ja.com

JSおよびCSSファイルのキャッシュ– Apache mod_headersは有効になりません

SOの答え で示唆されているように、JSとCSSファイルでバージョン番号を使用しようとしているので、ブラウザでJSまたはCSSバージョン番号が変更されたときにのみリクエストが行われますPHPファイル。これを容易にするために、httpd.confのような要求されたファイルをmyscript--20140904.jsに変換するmyscript.jsを書き換えます。この方法で作業しているので、バージョン番号が更新されると「別の」ファイルの要求が表示されるため、ブラウザーに長時間ファイルをキャッシュしてもらいたいです。

Webmasters.SEに対する回答 によると、FilesMatchHeader 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
2
AmadeusDrZaius
<FilesMatch "^(.*)\-\-.+\.(js|css)$">

FilesMatchfilenameを取り、URLではなくファイルシステムと一致します。基礎となるファイルはまだ「myscript.js」と呼ばれているため、このパターンは次のようになります:\.(js|css)$

(さておき...あなたのサンプルリクエストはcommon.jsに向けられているようです-これはあなたのパターンにマッチしなかったでしょう-これはcommon--20140904.jsに向けられるべきではありませんか?)

2
MrWhite