WordPress无Rewrite用cos-html-cache实现静态化

WordPress是一个非常不错的博客程序(不然本人页不用啊~),但是有一个缺点~插件安装多了就显示的很慢,但是还有很多插件不得不装,比如本人是个程序员,在网站上发布自己的心得,前几天写了域名批量查询工具by苗启源:http://miaoqiyuan.cn/p/yuming-query/,想要吧代码高亮的形式显示,安装了WP-Syntax:http://wordpress.org/extend/plugins/wp-syntax/,这样每次有用户请求页面就很变的很慢,甚至导致用户不能正常访问。这时候实现程序的静态化是一个不错的选择~

在网上狂搜一番,口碑最好的是cos-html-cache(http://wordpress.org/extend/plugins/cos-html-cache/),其最新版本为2.5,需要服务器支持Rewrite才能实现,但是国内虚拟主机基本上都是Window主机IIS平台,很少有支持Rewrite(IIS需要ISAPI Rewrite支持),难道国内的WrodPress只能用Liunx虚拟主机才能实现吗?我们Windows主机就没有静态化的权利?

经过笔者一番测试,终于实现了用WordPress不使用Rewrite实现静态化的方法(http://miaoqiyuan.cn/p/wordpress-plus-chc)

1.下载cos-html-cache 1.1(http://downloads.wordpress.org/plugin/cos-html-cache.1.1.zip),解压,传到/wp-content/plugins/目录,在后台”插件”中启用”cos-html-cache”

2.在”设置”永久选项中,自定义结构修改静态化的规则,本站为/p/%postname%/

3.在”设置”-“CosHtmlCache” 生成静态。看到这里,可能有的读者会说这和网上的很多文章一样,不就是网上的文章Copy了一份吗?这样是实现了内容页的静态化,点分类的时候就开始提示出错了~因为CosHtmlCache1.1只支持文章页首页的静态化,没有这个页面自然不能访问咯。解决方法嘛,请往下看:

4.现在虚拟主机都支持404页面自定义,所以~~聪明的你想到了吧?如果访问已经生成的静态页,自然能正常访问,不能生成的呢?提交参数给index.php,这样就实现了服务器不支持Rewrite实现静态化的目的了,下面是功能实现的代码:

我的空间支持404.asp,所以先发个404.asp的代码

< %
'ASP_Rewrite with 404 By MiaoQiyuan
 
'定义WordPress的处理页面,也可以是"/?"
PHP_Resource="/index.php/"
 
'获取服务器地址,这样可以实现多域名访问
Hst_Svr=Request.Servervariables("HTTP_HOST")
'获取服务器端口,防止
Hst_Pot=Request.Servervariables("SERVER_PORT")
'构造网址
Hst=Hst_Svr&":"&Hst_Pot
'构成404错误提交给404.asp的请求,因为服务器不一样,大家可以自己根据自己的虚拟主机测试一下
Err_404="404;http://"&Hst&"/"
Res_Get=Request.QueryString
'用真实404.asp的请求的错误信息(包括错误的请求地址)替换掉构成404错误,就剩下了请求的相对地址
Fnk_Get=Replace(Res_Get,Err_404,"")
 
'如果不为空,吧Fnk_Get提交给定义WordPress的处理页面
If Request.QueryString<>"" then
	Response.Redirect PHP_Resource&Fnk_Get
Else
	Response.Redirect PHP_Resource&"404.php"
End if
%>

下面说一下普通404.htm实现上述功能,因为html不能直接获取端口域名,所以我们用JS调用的方法,404.htm页面的代码只有一行

<script src="404_js.asp" type="text/javascript"><!--mce:0--></script>

404_js.asp的代码如下

&lt; %
&lt;%
'ASP_Rewrite with 404,Javascript By MiaoQiyuan
 
'定义WordPress的处理页面,也可以是"/?"
PHP_Resource="/index.php/"
 
'获取服务器地址,这样可以实现多域名访问
Hst_Svr=Request.Servervariables("HTTP_HOST")
'获取服务器端口,防止
Hst_Pot=Request.Servervariables("SERVER_PORT")
'构造网址
Hst=Hst_Svr&amp;":"&amp;Hst_Pot
'构成404错误提交给404.asp的请求
Err_404="404;http://"&amp;Hst&amp;"/"
%&gt;
<!--
var _Err;
if(location.search){
	_Err=location.search.replace("?<%=Err_404%>","");
}
else{
	_Err=location.href.replace("http://< %=Hst%>/","");
	_Err=location.href.replace("http://< %=Hst_Svr%>/","");
}
 
location.href="< %=PHP_Resource%>"+_Err;
-->

为什么不是用CosHtmlCache2.5?
因为CosHtmlCache2.0以上的版本都是根据Rewrite第一次访问自动生成,比如这篇文章,/p/wordpress-plus-chc,第一次访问,因为没有页面跳到/index.php/p/wordpress-plus-chc,这样文件路径就是/index.php/p/wordpress-plus-chc,而不是/p/wordpress-plus-chc,所以导致不能生成,而CosHtmlCache1.1是在文章创建的时候根据设置中的路径生成。

如果服务器仅支持404.htm是否有生成的必要?
在不考虑搜索引擎收录的情况下,可以使用,如果想要搜索引擎较好的收录,建议不要使用。404.htm只能通过JavaScript在浏览器中识别,而在搜索引擎中只能看到<script type=”text/javascript” src=”404_js.asp”></script>,如果支持404.asp就能较好的收录

WordPress无Rewrite用cos-html-cache实现静态化》上有7条评论

  1. Pingback引用通告: 苏丁之恋-Scony’s Blog » Blog Archive » IIS下不用Rewrite实现wordpress伪静态

  2. Pingback引用通告: » IIS下不用Rewrite实现wordpress伪静态 Java Article

  3. mqycn 文章作者

    恩,你的这段代码不错,学习了~
    < ?php $qs = $_SERVER['QUERY_STRING']; $_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ‘:80′)+3); $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI']; include(’index.php’); ?>

  4. Pingback引用通告: 苗启源的部落格 » 巧用404.php解决Wordpress耗资源的问题,给Wordpress加个缓存功能

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.