經常在網站上看到諸如www.abc.com/?news或者www.abc.com/?id=123這樣的網址,一開始覺得很神秘,其實現在看多了,用得多了,也覺得沒那以多深奧的技術,就是用一些最簡單的方法就能實現,以ASP為例,用好server.transfer這個方法就可以實現以上的功能了。
假設地址是www.abc.com/?news,如何顯示我們需要的news.ASP呢?首先要先明白,不論什麼服務器,都會有一個缺省頁,比如你把index.html或者index.htm上傳到主頁空間,輸入網址,默認總是會轉到index頁面上,主機默認index.Html(index.htm)為缺省頁,當然,index.asp也是一樣的,不過當這幾個頁面同時出現時,先顯示哪一個,就看服務器的設定了。現在我們在目錄下新建一個index.asp,假設訪問的路徑是www.abc.com/,那麼對於這個地址我們也是可以用www.abc.com/index.asp來訪問的,而前者就把index.ASP給隱藏了。
現在我們來實現用www.abc.com/?news來指向news.asp,打開index.ASP,編輯它的源文件,如下:
<%
dim targetPage
targetPage=request.querystring()
if targetPage<>"" then
server.transfer(targetPage+".ASP")
end if
%>
這裡用的是request.querystring()來接收字符,因為我們的請求字符串是?news,而並不是像傳統的類似於變量名對應變量值的形式,所以我們用request.querystring()的方法來取得“?”後面的所有字符。這裡我們得到了字符串“news”。接下來判斷一下,如果不是空串就將它轉化成new.asp,並用server.transfer轉向,這裡,之所以用server.transfer,你會發現,頁面轉向了,但浏覽器地址欄卻沒有變,不會因為轉向而變成了www.abc.com/new.ASP,就是基於server.transfer這個原理,才能實現隱藏訪問頁面的目的。
不過樣的形式太簡單,還是很容易讓人猜到真實地址,那就再深入一步吧,做一個地址映射表,原理也不難,建立一個數組,將你要轉向的地址名寫進去,然後通過www.abc.com/?arrayID的形式來訪問,其中arrayID是地址對應的數組下標。就舉個例子來說吧:
<%
dim targetPage,urlTable(4)
targetPage=request.querystring()
urlTable(1)="news.ASP"
urlTable(2)="list.ASP"
urlTable(3)="homepage.ASP"
urlTable(4)="login.ASP
server.transfer(urlTable(targetPage))
%>
如果我們要訪問news.ASP,則可以用www.abc.com/?1,這樣的地址映射在地址信息中不容易讓人猜到文件的命名方法,自然是保密性高了不少,不過這種方法對於過多地址轉向,數組的體積就會增長,也不是一種很好的方法,在維護時也不是很容易。
相比之下,第一種方法在網上使用的似乎也挺普遍的,第二種,也有使用,另外,對於地址信息的編碼,以及在index.ASP中對轉向功能進一步強化,引入各種加密機制,也是能夠達到隱藏真實頁面的目的。而作為我,只是拋磚引玉,就介紹這些最簡單的東西,如果要使用到實際,自然是需要添磚加瓦的。