1、使用isapi_rewrite進行動態連結重寫html靜態網址。isapi_rewrite是一個dll組件,re_write是iis裡的一個模組。這個篩選器實現是通過Regex,將動態網頁網址映射成為靜態網址。如可將news.asp?id=95通過re_write將其轉換成news/95.html。映射的Regex在httpd.ini檔案裡進行設定。
舉個小小例:處理資料翻頁,那麼寫法是:
more_<%=page%>_<%=type%>.html (註:page是翻頁頁數,type是資料類型)表現形式:more_1_95.html
如果翻下一頁,則為:more_2_95.html,繼續下一頁的迴圈,則是:
more_3_95.html,以此類推。
不過你需要在httpd.ini檔案中增加以下代碼:
rewriterule /more_(d+)_(d+).html /jsp教程/more.asp?page=$1&type=$2 [n,i] 字串9
如果你的動態程式有多個參數需要傳遞,那麼就增加多個(d+)即可,如下:
rewriterule /more_(d+)_(d+)_(d+).html /asp/more.asp?page=$1&type=$2&type2=$3 [n,i]
優點:在程式上基本不需做什麼變化。麻煩:要實現這個需要對iis進行控制,所以當你租用別人的伺服器時,則需要先跟服務商聯絡。(當然這個是對asp而言,asp.net教程就不用——直接將dll程式集放到程式中的bin再適當的配置即可實現)
2、iis的404錯誤處理機制:通過自訂錯誤,轉向我們準備好的處理頁。不過這種可拓展性有待研究,對程式處理的統籌要求也高,不大適合實際應用的樣子。
首先,佈建網站屬性-自定意錯誤
找到http錯誤404,然後編輯屬性->訊息類型選中url->url填入"/index.asp",或您的錯誤處理頁面.
這樣,比如使用者或蜘蛛訪問http://cn/12345.html 時(12345為文章在資料庫教程的id).由於些頁面不存在,所以觸發了404錯誤.轉向了index.asp
在index.asp裡加
複製代碼 代碼如下:currdomain=request.servervariables("http_host") '當前訪問網域名稱
currurl=replace(request.servervariables("query_string"),"404;http://"&currdomain&":80","") '當前訪問url
此時的currurl應該是:12345.html .
3.
1.建立一個檔案夾info (因為最終訪問資訊的頁面url為http://localhost/info/?1.html)
2.在info檔案夾下建立一個default.asp檔案(就是預設首頁的那個頁面)
default.asp檔案的內容如下 複製代碼 代碼如下:<%
currdomain=request.servervariables("http_host") '當前訪問網域名稱
currurl=replace(request.servervariables("query_string"),"404;http://"&currdomain&"/info/?","") '當前訪問url
id=replace(currurl,".html","")
%>
其中id即是傳入的參數
如果是多個參數可以把url偽靜態化為info/?1-2-3.html
其中1,2,3各代表三個參數的值,分隔字串分別提出即可。
真實html靜態頁面
把html代碼寫入到檔案中然後產生.html格式的檔案 複製代碼 代碼如下:<%
filename="test.htm"
if request("body")<>"" then
set fso = server.createobject("scripting.filesystemobject")
set htmlwrite = fso.createtextfile(server.mappath(""filename""))
htmlwrite.write "<html><head><title>" request.form("title") "</title></head>"
htmlwrite.write "<body>輸出title內容: " request.form("title") "<br /> 輸出body內容:" request.form("body") "</body></html>"
htmlwrite.close
set fout=nothing
set fso=nothing
end if
%>
<form name="form" method="post" action="">
<input name="title" value="title" size=26>
<br>
<textarea name="body">body</textarea>
<br>
<br>
<input type="submit" name="submit" value="產生html">
</form>
2、但是按照上面的方法產生html檔案非常不方便,第二種方法就是利用模板技術,將模板中特殊代碼的值替換為從表單或是資料庫欄位中接受過來的值,完成模板功能;將最終替換過的所有模板代碼產生html檔案.這種技術採用得比較多,大部分的cms都是使用這類方法.
template.htm ' //模板檔案 複製代碼 代碼如下: <html>
<head>
<title>$title$ by aspid.cn</title>
</head>
<body>
$body$
</body>
</html>testtemplate.asp '// 產生html
<%
dim fso,htmlwrite
dim strtitle,strcontent,strout
'// 建立檔案系統對象
set fso=server.createobject("scripting.filesystemobject")
'// 開啟網頁模板檔案,讀模數板內容
set htmlwrite=fso.opentextfile(server.mappath("template.htm"))
strout=f.readall
htmlwrite.close
strtitle="產生的網頁標題"
strcontent="產生的網頁內容"
'// 用真實內容替換模板中的標記
strout=replace(strout,"$title$",strtitle)
strout=replace(strout,"$body$",strcontent)
'// 建立要產生的靜態頁
set htmlwrite=fso.createtextfile(server.mappath("test.htm"),true)
'// 寫入網頁內容
htmlwrite.writeline strout
htmlwrite.close
response.write "產生靜態頁成功!"
'// 釋放檔案系統對象
set htmlwrite=nothing
set fso=nothing
%>