Z-Blog目前已經(jīng)實(shí)現(xiàn)了首頁和文章頁的靜態(tài)化,可以生成HTML文件,但是系統(tǒng)的分類頁、標(biāo)簽Tags頁、歸檔頁和作者頁都沒有實(shí)現(xiàn)靜態(tài)化,本文將講述一個(gè)非常簡(jiǎn)單的方案,能夠自動(dòng)生成各個(gè)分類頁、歸檔頁和Tags的靜態(tài)HTML頁面,以便用戶將網(wǎng)站遷移到Apache等不支持ASP的主機(jī)上。
Z-Blog的分類頁、標(biāo)簽Tags頁、歸檔頁和作者頁都是調(diào)用catalog.asp這個(gè)文件,因此,修改這個(gè)文件,當(dāng)用戶調(diào)用該文件的時(shí)候,自動(dòng)生成針對(duì)該頁面的HTML文件。如果訪客反復(fù)讀取這個(gè)文件,那么在一定時(shí)間范圍內(nèi),可以直接在文件開頭使用靜態(tài)文件,以達(dá)到節(jié)省系統(tǒng)資源的目的。
具體的修改方法是,先在根下建立一個(gè)目錄cat,然后使用編輯器打開Z-Blog根目錄下的catalog.asp文件,在文件開頭加入如下的代碼:
Dim objFSO
Dim objFile
Dim strFileName
Dim strFileTime
Dim isBuildFile
if Request.QueryString("cate")<>"" then
if Request.QueryString( "page")<>""then
strFileName = "cate" + "_" + Request.QueryString("cate") + "_" + Request.QueryString("page") +".html"
else
strFileName = "cate" + "_" + Request.QueryString("cate") + ".html"
end if
elseif Request.QueryString("tags")<>"" then
if Request.QueryString( "page")<>""then
strFileName = "tags" + "_" + Request.QueryString("tags") + "_" + Request.QueryString("page") +".html"
else
strFileName = "tags" + "_" + Request.QueryString("tags") + ".html"
end if
elseif Request.QueryString("auth")<>"" then
if Request.QueryString( "page")<>""then
strFileName = "auth" + "_" + Request.QueryString("auth") + "_" + Request.QueryString("page") +".html"
else
strFileName = "auth" + "_" + Request.QueryString("auth") + ".html"
end if
elseif Request.QueryString("date")<>"" then
if Request.QueryString( "page")<>""then
strFileName = "date" + "_" + Request.QueryString("date") + "_" + Request.QueryString("page") +".html"
else
strFileName = "date" + "_" + Request.QueryString("date") + ".html"
end if
elseif Request.QueryString("page")<>"" then
strFileName = "default" + "_" + Request.QueryString("page") +".html"
else
strFileName = "default_1" + ".html"
end If
isBuildFile = False
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(Server.MapPath(strFileName)) Then
Set objFile = objFSO.GetFile(Server.MapPath(strFileName))
strFileTime = objFile.DateLastModified
Set objFile = Nothing
If datediff( "h",strFileTime,Now()) > 1 Then
isBuildFile = True
Else
Server.Transfer strFileName
Response.End
End If
Else
isBuildFile = True
End If
Set objFSO = Nothing
找到 Response.Write ArtList.html 一行,在其后面增加如下代碼:
If isBuildFile Then
ArtList.FileName=strFileName
ArtList.Directory= "cat"
ArtList.Save
End if
這樣,系統(tǒng)就會(huì)自動(dòng)生成全部動(dòng)態(tài)頁面的靜態(tài)HTML文件,并且在1小時(shí)內(nèi)不會(huì)重復(fù)生成,期間如果還有調(diào)用,則自動(dòng)載入靜態(tài)HTML文件,以節(jié)省系統(tǒng)資源。
經(jīng)過這番處理,Z-Blog的全部分類和Tags就都可以生成靜態(tài)HTML頁面了。
經(jīng)過靜態(tài)化之后,就可以將Z-Blog全站都放在PHP+Apache的主機(jī)上了。具體方法是,配置Apache主機(jī),使其用php的方法解析asp,然后編輯catalog.asp這個(gè)文件,將其代碼修改為如下即可:
if (isset($_GET['cate'])) {
if (isset($_GET['page'])) {
$strFileName = "cate_".strip_tags(stripslashes(trim($_GET['cate'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";
} else {
$strFileName = "cate_".strip_tags(stripslashes(trim($_GET['cate']))).".html";
}
} else if (isset($_GET['tags'])) {
if (isset($_GET['page'])) {
$strFileName = "tags_".strip_tags(stripslashes(trim($_GET['tags'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";
} else {
$strFileName = "tags_".strip_tags(stripslashes(trim($_GET['tags']))).".html";
}
} else if (isset($_GET['auth'])) {
if (isset($_GET['page'])) {
$strFileName = "auth_".strip_tags(stripslashes(trim($_GET['auth'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";
} else {
$strFileName = "auth_".strip_tags(stripslashes(trim($_GET['auth']))).".html";
}
} else if (isset($_GET['date'])) {
if (isset($_GET['page'])) {
$strFileName = "date_".strip_tags(stripslashes(trim($_GET['date'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";
} else {
$strFileName = "date_".strip_tags(stripslashes(trim($_GET['date']))).".html";
}
} else if (isset($_GET['page'])) {
$strFileName = "default_".strip_tags(stripslashes(trim($_GET['page']))).".html";
} else {
$strFileName = "../default.html";
}
define("HTML_FILE", dirname(__FILE__)."/".$strFileName);
if (file_exists(HTML_FILE)) {
echo(file_get_contents(HTML_FILE));
exit(0);
} else {
exit(0);
}
如果不想用PHP來處理,也可以直接配置.htaccess文件來實(shí)現(xiàn)同樣的功能,.htaccess文件的內(nèi)容如下:
RewriteRule ^(.*)/cat/?cate=(.+)&page=(.+)$ $1/cat/cate_$2_$3.html
RewriteRule ^(.*)/cat/?cate=(.+)$ $1/cat/cate_$2.html
RewriteRule ^(.*)/cat/?tags=(.+)&page=(.+)$ $1/cat/tags_$2_$3.html
RewriteRule ^(.*)/cat/?tags=(.+)$ $1/cat/tags_$2.html
RewriteRule ^(.*)/cat/?auth=(.+)&page=(.+)$ $1/cat/auth_$2_$3.html
RewriteRule ^(.*)/cat/?auth=(.+)$ $1/cat/auth_$2.html
RewriteRule ^(.*)/cat/?date=(.+)&page=(.+)$ $1/cat/date_$2_$3.html
RewriteRule ^(.*)/cat/?date=(.+)$ $1/cat/date_$2.html
RewriteRule ^(.*)/cat/?page=(.+)$ $1/cat/default_$2.html
|