2

Chromeを使用してサイトを監査しましたが、.htaccessファイルを設定したにもかかわらず、.jsファイルと.cssファイルがキャッシュされていないことがわかりました。

以下のコードを除いて、サイトのルートhtaccessファイルからすべてを削除しましたが、Chromeで「次のリソースは明示的にキャッシュ不可です。可能であればキャッシュ可能にすることを検討してください」というメッセージが表示され、メインの外部.jsファイルと.cssファイルが示されます。キャッシュされていません。これらのファイルと画像は、ダウンロードサイズ全体の90%に相当するため、キャッシュできないと気が狂います。

これは現在、私の.htaccessファイルのコードです。これとまったく同じように設定しても、何もキャッシュされません。

# Disable Etags
Header unset ETag
FileETag None

# Expires
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header unset Last-Modified
Header set Cache-Control "public"

<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi|html?)$">
Header set Cache-Control "private, must-revalidate, proxy-revalidate"
ExpiresDefault A0
ExpiresActive Off
</FilesMatch>

# Enable Compresion
<FilesMatch ".(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>

このコードが機能していないのはhttp://lujanventas.comで確認できます。

キャッシュコントロールを.css、.js、および画像ファイルに公開するにはどうすればよいですか?

4

4 に答える 4

3

私はキャッシュコントロールと有効期限ヘッダーの専門家ではありませんが、常にこのコードを使用し、常に機能します(それがあなたが探しているものかどうかはわかりませんが、とにかく投稿します、それがあなたのために機能するかどうかを確認してくださいいいえ) :

#################
# CACHE HEADERS #
#################
## BEGIN Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 7200 seconds"
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType image/jpg "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    AddType image/x-icon .ico
    ExpiresByType image/ico "access plus 2592000 seconds"
    ExpiresByType image/icon "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 2592000 seconds"
    ExpiresByType text/javascript "access plus 2592000 seconds"
    ExpiresByType text/html "access plus 7200 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType application/xhtml+xml "access plus 7200 seconds"
    ExpiresByType application/xhtml+xml "access plus 1 seconds"
    ExpiresByType application/javascript "access plus 2592000 seconds"
    ExpiresByType application/x-javascript "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
</IfModule>
## END Expire headers
#################
# CACHE CONTROL #
#################
## BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$">
        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=2592000, private"
    </FilesMatch>
    <filesMatch "\\.(html|htm)$">
        Header set Cache-Control "max-age=7200, public"
        Header set Cache-Control "max-age=1, public"
    </filesMatch>
    # Disable caching for scripts and other dynamic files
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>
## END Cache-Control Headers
########
# ETAG #
########
## KILL THEM ETAGS
Header unset ETag
FileETag none
于 2012-08-29T12:45:46.773 に答える
1
ExpiresActive On
ExpiresDefault A0

# 1 Week expire
<filesMatch "\.(gif|jpg|jpeg|png|swf|css|js)$">
ExpiresDefault A604800
Header append Cache-Control "public"
</filesMatch>

#No caching
<filesMatch "\.(pl|php|cgi|spl|scgi|fcgi|html)$">
ExpiresActive Off
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"

これでうまくいくと思います。

于 2012-08-29T09:20:52.907 に答える
1

これを書いている時点で、実行中のサーバーはJavaScript用にそのようにヘッダーを生成します。

Expires: access plus 1 day

これは正しくありません。発効日時に置き換える必要があります。したがって、ブラウザがリソースを適切にキャッシュできないことを説明しています。

ドキュメントによると、それが機能しない理由はありません。

Apache2が行を正しく解析するのを妨げる隠し文字が構成にありますか?行の行を削除してExpiresDefault、信頼できるテキストエディタで最初からもう一度入力してみてください。

それでも失敗する場合、Apache2のバージョン/バイナリはどこから来ていますか?

于 2012-08-31T12:00:51.577 に答える
0

構成ファイルで次を変更します。

Header set Cache-Control "public"

のように見えるように

Header set Cache-Control "public max-age=31536000"

したがって、ファイルは少なくとも1年間キャッシュされます(max-ageは秒単位です)。

なんで?あなたのページを2回ロードしましたが、リクエストがmax-age=0

また、このページをチェックしてください。mod_expiresモジュールに関するいくつかの洞察が得られます。

于 2012-08-29T17:11:22.273 に答える