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
%> |
< %
'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> |
<script src="404_js.asp" type="text/javascript"><!--mce:0--></script>
404_js.asp的代碼如下
< %
<%
'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&":"&Hst_Pot
'構成404錯誤提交給404.asp的請求
Err_404="404;http://"&Hst&"/"
%>
<!--
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;
--> |
< %
<%
'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&":"&Hst_Pot
'構成404錯誤提交給404.asp的請求
Err_404="404;http://"&Hst&"/"
%>
<!--
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就能較好的收錄