WordPress缓存插件W3TC开启minify后静态链接的修复

背景

Leniy的博客因为主机性能问题,使用了page缓存插件w3tc。

又因为我的博客中的css和js文件太多,虽然启用了CDN加速,仍然会导致页面打开时响应时间过长,而且CDN中过多的GET会导致额外的费用产生。故而我同时启用了w3tc的minify功能。

开启minify后,系统自动生成的合并文件可以通过下面的选项,设置为rewrite模式:

w3tc-minify-setting

不启用本功能时,为php模式,网页加载的css或js文件路径是这样的:

而启用本功能后,为rewrite模式,文件路径变为:

前者将文件名作为GET的参数传递给minify.php文件后,由php文件输出;后者直接是服务器中的一个文件,对于系统性能的优化非常有帮助。

问题

但是在我的博客中,前者php模式正常。

使用后者rewrite模式的路径时,如果服务器中这个缓存文件存在,则能打开,如果不存在,就直接跳转到了主题404页面,导致站点js和css丢失,页面显示及功能异常。

问题在于:缓存文件是系统自动生成的,随时会改变,不可能每次都去后台临时启用php模式,等到文件生成后再启用rewrite模式,否则同直接使用php模式就没有区别了。

分析

当服务器中css等缓存文件不存在时,打开这个路径返回主题404页面,就说明此路径通过wordpress的.htaccess规则,传递给了index.php文件。

但是为了第一次打开时能自动调用minify.php生成文件,那么必然要有一段htaccess代码执行这个步骤。

两种模式调用路径的区别是:

其中000000目录也是自动生成的,那么在minify目录中就需要一个.htaccess文件做这个工作。而我的服务器的这个目录中却没有这个文件。

.htaccess文件应该是自动生成的,服务器各个目录的读写权限没问题,那么就可能是其它冲突等问题导致的了。

解决

新建一个临时的wordpress服务器,安装这个插件并开启rewrite模式,查看minify目录,果然自动生成了一个.htaccess文件。打开文件把其中的代码修改为适合我的博客的情况,手动在博客服务器对应的目录建立一个.htaccess文件:

经过验证,rewrite模式正常工作了,问题解决。

作者: Leniy

Do not , for one repulse , give up the purpose that you resolved to effect .

本文著作版权归Leniy所有,并受法律保护。

转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。

CopyRight © 2006-2017 Leniy.org all rights reserved.

18 thoughts on “WordPress缓存插件W3TC开启minify后静态链接的修复

    • Leniy

      可以手动定制下,把需要分开合并的以及延后合并的指定一下就可以

    • Leniy

      对于类似于我的博客主机这样的,打开页面仅仅sql查询就需要十多秒,开启缓存是非常有必要的。

    • Leniy

      你的博客也设置了伪静态功能。上面的代码就是实现这个功能的源码

发表评论

电子邮件地址不会被公开。 必填项已用*标注