我刚刚完成了一个drupal项目,我正在经历网站的优化阶段。我已经在性能下检查了缓存块和CSS以及JS聚合,以获得更好的加载时间。但我注意到,当我运行页面速度测试或Yslow一切都通过但利用浏览器缓存。似乎没有在所有图像和css文件上设置到期日期。我的问题是我是否需要编辑.htaccess文件,还是需要将未缓存的图像和css文件放入特定文件夹?
感谢任何帮助,非常感谢提前
答案 0 :(得分:2)
您可以使用mod_expires和mod_headers配置Apache为您的image / css / js文件设置特定的过期/缓存控制标头。
以下是一些示例(一般示例 - 在应用于您的系统之前分析和查阅手册):
<FilesMatch "\.(html|htm|js|css)$">
FileETag None
<IfModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</IfModule>
</FilesMatch>
使用mod_expires + mod_headers进行缓存
# Turn on Expires and set default to 0
ExpiresActive On
ExpiresDefault A0
# Set up caching on media files for 1 year (forever?)
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A29030400
Header append Cache-Control "public"
</FilesMatch>
# Set up caching on media files for 1 week
<FilesMatch "\.(gif|jpg|jpeg|png|swf)$">
ExpiresDefault A604800
Header append Cache-Control "public"
</FilesMatch>
# Set up 2 Hour caching on commonly updated files
<FilesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "proxy-revalidate"
</FilesMatch>
# Force no caching for dynamic files
<FilesMatch "\.(php|cgi|pl|htm)$">
ExpiresActive Off
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
答案 1 :(得分:0)
我长期遇到同样的问题而且我找到了诀窍!
查看位于drupal根存储库的.htaccess后,出现以下情况:
<IfModule mod_expires.c> ... </IfModule>
由于apache的expires_module在我的服务器上没有启用,因此未执行内部代码,检查返回的列表中是否存在expires_module:
sudo apache2ctl -M
如果没有,只需通过以下方式激活它:
sudo a2enmod expires
sudo a2enmod headers
sudo service apache2 restart