利用浏览器缓存和CakePHP

时间:2013-09-21 00:16:00

标签: php .htaccess cakephp caching cakephp-1.3

我问我的主人他们是否支持mod_expires,他们告诉我它是支持的。我使用CakePHP,我在webroot/.htaccess和`app_root / .htaccess中尝试了以下代码,但考虑到css,js,png,jpg等的缓存存在问题,Google的页面速度很快,它发现它们24小时! 如下面的屏幕截图

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=31449600, public"
</FilesMatch>

以上代码来自this article

我还使用了以下内容:

<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresByType image/jpg "access 1 year"
 ExpiresByType image/jpeg "access 1 year"
 ExpiresByType image/gif "access 1 year"
 ExpiresByType image/png "access 1 year"
 ExpiresByType text/css "access 1 year"
 ExpiresByType text/html "access 1 month"
# ExpiresByType application/pdf "access 1 month"
 ExpiresByType text/x-javascript "access 1 year"
 ExpiresByType text/javascript "access 1 year"
 ExpiresByType application/javascript "access 1 year"
# ExpiresByType application/x-shockwave-flash "access 1 month"
# ExpiresByType image/x-icon "access 1 year"
 ExpiresDefault "access 1 year"
</IfModule>

此外,我尝试将两个代码互相使用,但Google Speed告诉我相同的内容。请看以下屏幕截图:

enter image description here

我需要知道如何解决这个问题?!!

  

修改##

     

在Firefox中使用firebug我注意到只有app/views/themed/slate/webroot中的资源不受缓存影响   上面提到的设置,但直接在app/webroot中找到的设置,   即没有,主题受到影响。

1 个答案:

答案 0 :(得分:1)

似乎是a bug in cakephp。在cakePHP 1.3+中,主题视图资产已从app/webroot/themed/themeTitle移至app/views/themed/themeTitle/webroot

根据CakePHP 1.3 documentation,您可以通过创建app/webroot/theme/themeTitle

来恢复主题静态资​​源的旧位置(即主Webroot中)
  

链接到静态资产与1.2略有不同。你还可以   使用现有的app / webroot / themed并直接链接到那些静态   文件。应该注意,您将需要使用完整路径   链接到app / webroot / themed中的资产。如果你想保持你的主题   app / webroot中的资产建议您重命名   app / webroot /主题为app / webroot / theme 。这将允许你   利用核心辅助路径查找。以及保持性能   不通过PHP提供资产的好处。

因此,我为解决此问题所做的工作是将app/views/themed/slate/webroot中的所有文件复制到app/webroot/theme/slate

以下屏幕截图来自FireFox Firebug,它显示一个图像文件在一年后的几秒钟内过期:

enter image description here