<!--#include file="bin/404_Query"-->
< %
select case bin_command
case "bin"
server.transfer("bin/web")
case "uploadfiles"
server.transfer("bin/send-stream")
case else
server.transfer("bin/send-404")
end select
%>
根據(jù)bin_command來判斷到底要實現(xiàn)很么功能,如果為bin則由asp的Server.Transfer移交到到bin/web,然后返回結(jié)果,考試,大提示能很好的解決URL地址的友好性的問題,實現(xiàn)模式生成靜態(tài)頁的效果。在PHP中沒有Rewrite,如果想要URL友好性通常實用PATH_INFO,而本程序由asp的Server.Transfer模擬了PHP中的Path_Info,唯一需要的就是要支持404.asp
bin/404_Query的源代碼如下:
< %
Urls=mid(request.querystring,instr(request.querystring,":80")+4)
if instr(Urls,"/")>0 then
bin_command=left(Urls,instr(Urls,"/")-1)
getfile=replace(Urls,bin_command&"/","")
else
bin_command="bin"
end if
%>
這段代碼主要是判斷bin_command由什么來執(zhí)行,首先看是否包含二級目錄,如果沒二級目錄,則賦值”bin”(代表程序)
如:demo.com/index5.html,則bin_command=”bin”,通過上邊的代碼可以知道交給bin/web處理
demo.com/uploadfiles/123456.gif(該文件實際對應(yīng)的是files/123456.gif),則bin_command=”uploadfiles”,通過上邊的代碼可以知道交給bin/send-stream處理,send-stream怎么輸出files/123456.gif呢。可以參考我以前寫的一篇文章 ASP實用BinaryWrite與Adodb.Stream實現(xiàn)下載(http://miaoqiyuan.cn/p/asp-binarywrite-adodb-stream/)
demo.com/111/222,則bin_command=”111″,在select case中沒有定義,則是else,交給bin/send-404處理,輸出沒有找到文件的信息
這樣在所有訪客(包括:百度,Google)看來,本站都是一個生成靜態(tài)的頁面了。據(jù)我所知國內(nèi)IIS主機有99.9%不支持Isapi_Rewrite,就遇過一次,因為占資源太嚴重很快就給取消了。
下面是我在ASP學習網(wǎng)上看到的,附在后面,以供參考:
調(diào)用 Server.Transfer 方法,立即終止執(zhí)行第一頁并且開始執(zhí)行第二頁。
如果第一頁開始寫入響應(yīng)緩沖區(qū), 第二頁追加內(nèi)容到緩沖區(qū)而不是替換它。
如果緩沖是打開, 考試,大提示該方法將修改 HTTP 頭,除非尚沒有內(nèi)容已被發(fā)送.如果 ASP 緩沖關(guān)閉, HTTP 頭將不修改.
當傳輸?shù)狡渌麘?yīng)用程序, 起始頁 Application 和 Session 對象將包含應(yīng)用程序信息中。
示例
下列示例頁闡釋如何使用 Server.Transfer 方法。 1. <html>
<body>
<h3>Step 1 - Form Page</h3>
<table border="1">
<tr>
<th>POST</th>
<td>
<form action="page2.asp" method="POST">
<input type="text" name="Name"/>
<input type="submit" value="Submit"/>
</form>
</td>
</tr><tr>
</tr>
<th>GET</th>
<td>
<form action="page2.asp" method="GET">
<input type="text" name="Name"/>
<input type="submit" value="Submit"/>
</form>
</td>
</table>
</body>
</html>
2. 將以下代碼作為 ” page2.asp ” (不帶引號): < % @LANGUAGE="VBSCRIPT" %>
<html>
<body>
<h3>Step 2 - Transfer Page</h3>
< %
Select Case UCase(Request.ServerVariables("REQUEST_METHOD"))
Case "POST"
Server.Transfer "page3a.asp"
Case "GET"
Server.Transfer "page3b.asp"
Case Else
Response.Write "An unknown HTTP verb was used."
End Select
%>
</body>
</html>
3. 將以下代碼作為 ” page3a.asp ” (不帶引號): < % @LANGUAGE="VBSCRIPT" %>
<h3>Step 3a - POST Results</h3>
<p>Hello < % = Request.Form("Name") %></p>
4. 將以下代碼作為 ” page3b.asp ” (不帶引號): < % @LANGUAGE="VBSCRIPT" %>
<h3>Step 3b - GET Results</h3>
<p>Hello < % = Request.QueryString("Name") %></p>
注意: 最后兩頁是不完整 HTML 頁。 這是因為兩頁都追加到到第二頁緩沖區(qū)上。
瀏覽page1.asp,即可測試該實例。