我使用Chrome来审核我的网站,但我发现.js和.css文件没有被缓存,尽管我已经设置了我的.htaccess文件。
我删除了我网站的root htaccess文件中的所有内容,但下面的代码除外,我仍然收到消息“以下资源明确是不可缓存的。如果可能的话,考虑让它们可缓存”,表示我的主要外部.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>
看到此代码无效
如何将缓存控制公共设置为.css,.js和图像文件?
答案 0 :(得分: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
答案 1 :(得分: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"
我相信这应该有用。
答案 2 :(得分:1)
在撰写本文时,您运行的服务器会为JavaScript生成标题:
Expires: access plus 1 day
这是不正确的,它应该被有效的日期和时间所取代。因此,它解释了没有浏览器能够正确缓存资源。
根据documentation,没有理由说它不起作用。
您的配置中是否有任何隐藏的字符阻止Apache2正确解析该行?尝试删除行ExpiresDefault
行,然后在可靠的文本编辑器中从头开始再次输入。
如果仍然失败,您的Apache2版本/二进制文件来自哪里?
答案 3 :(得分:0)
在配置文件中修改:
Header set Cache-Control "public"
看起来像
Header set Cache-Control "public max-age=31536000"
所以你的文件缓存至少一年(max-age以秒为单位)。
为什么呢?我加载了两次页面,然后我看到请求发送了max-age=0
另外,请查看此page,它会在mod_expires模块中提供一些见解。