程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP基礎知識 >> 用靜態URL顯示動態網頁

用靜態URL顯示動態網頁

編輯:ASP基礎知識

動態生成的網頁在構造真正大型的網站時是不可缺少的。但是,動態頁面的名字(即它的URL)往往缺乏明確的含義。例如,名為product.asp?Id=4的頁面總不如名為/applicances/dishwashers/Model3809.htm的頁面來得好記。本文介紹如何實現靜態頁面名字和動態頁面的映射。  
概述  
靜態頁面名字除了具有含義更明確這一優點之外,它的另外一個優點在於搜索引擎能夠索引這些頁面。大多數搜索引擎,如Alta Vista和Yahoo,不會檢索URL中帶有問號的頁面,因為它們擔心進入永無止境的鏈接迷宮。把動態頁面名字轉換成靜態頁面名字之後,搜索引擎就會對這些頁面進行索引和分類,從而為網站帶來更多的訪問量。  
要使用本文介紹的方法將動態名字轉換成靜態名字,你必須使用Windows 2000和IIS 5.0。IIS 5.0的兩個改進使得我們可以實現這種轉換,它們是:使用Server.Transfer的“自定義錯誤信息”功能以及在ASP頁面中使用Server.Transfer的能力。雖然IIS 4.0也支持自定義錯誤信息,但它使用的是Response.Redirect,沒有用,所以本文方法要求使用IIS 5.0。Response.Redirect之所以沒有用,是因為搜索引擎不會追隨重定向。  
使用本文所介紹的方法,網站開發者先用靜態風格的URL鏈接事實上並不存在的頁面。然後設置IIS服務器,告訴它要用指定的ASP頁面(404.asp)來處理網站上出現的所有404錯誤。在這個404.asp頁面裡,把原來的URL轉換成正式的動態URL,利用Server.Transfer執行並向用戶浏覽器返回目標頁面。  
假設有如下URL:  
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
其中myserver.com以網站的域名取代,該URL將返回404錯誤。我們首先要做的是用某個專用的.asp頁面來處理所有這些404錯誤。這可以用IIS 5.0的“自定義錯誤信息”功能來實現。設置該功能的過程如下:  
●在MMC中打開IIS服務器管理器  
●右擊Web網站節點,然後選擇“屬性”  
●點擊“自定義錯誤信息”頁  
●向下滾動,直至找到404錯誤  
●雙擊404錯誤,打開“錯誤映射屬性”對話框  
●將消息類型改為URL  
●在URL框輸入“/404.asp”  
●點擊“確定”關閉窗口  
現在404錯誤已經由404.asp處理了。當IIS調用404.asp頁面時,它會提供導致這個404錯誤的URL,這對我們來說是非常有用的。  
錯誤處理頁面  
接下來我們創建處理錯誤的404.asp頁面。首先要做的是獲得導致這個404錯誤的頁面名字。下面這行代碼從查詢字符串提取這個頁面的名字:  
< %
'獲得頁面名字
strQ = Request.ServerVariables("QUERY_STRING")
% >
那麼,strQ中的哪些內容才是重要的呢?在上例中它應該如下所示:/applicances/dishwashers/kenmore/Model3809.htm。我們真正需要的只有其中的Model3809(產品型號),因為這是產品數據庫中的唯一鍵。下面這幾行代碼根據產品型號找出產品的ID(編號):  
< %
' 計算產品型號
nIndex = InStrRev(strQ,"/")
If (nIndex >0) Then
strModelNumber = Right(strQ,Len(strQ)-nIndex)
strQ = Left(strQ,nIndex-1)
End If
 
' 從產品型號去掉.htm後綴
If ((Mid(strPageName,Len(strPageName),1)="m") And _
(Mid(strPageName,Len(strPageName)-1,1)="t") And _
(Mid(strPageName,Len(strPageName)-2,1)="h") And _
(Mid(strPageName,(strPageName)-3,1)=".")) Then
 
strModelNumber =Left(strPageName,Len(strModelNumber)-4)
 
End If
 
' 從產品數據庫查找產品編號
strSQL = "SELECT Product_Id FROM Product " _
& "WHERE Product_Model = '" & strModelNumber & "'"
Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then
lProductId = oRS("Product_Id")
End If
% >
現在我們得到了產品編號,在轉換到正確的ASP頁面之前必須先保存它。我們無法通過Server.Transfer在查詢字符串中傳遞產品編號(這是IIS的一個局限),因此必須通過Session對象來傳遞它。  
< %  
Session("Id") = lProductId  
Server.Transfer("/product.asp")
% >
執行這個頁面時,浏覽器地址欄中的內容如下:  
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
由於使用了Server.Transfer,浏覽器地址欄中的URL不會改變,同樣浏覽器也不需要與服務器再交互一次,這與Response.Redirect是不同的。  
另外也請注意URL中的目錄是根本不存在的,事實上在這裡URL中除了服務器名字之外的其余內容根本不起什麼作用。例如,下面的幾個URL都將返回同一頁面。  
http://www.myserver.com/Model3809.htm
http://www.myserver.com/trucks/ford/Model3809.htm
那麼為什麼要加上這麼多目錄呢?這些目錄將提高搜索引擎對網站的評價。一些搜索引擎認為URL中的單詞是比頁面標題和正文更重要的搜索關鍵詞,所以目錄名字是非常重要的。  
調用不存在的頁面  
我們已經討論了將並不存在的URL轉換為有效動態URL的技術。然而,要讓搜索引擎能夠索引這些頁面,我們還需要鏈接這些並不存在的URL。換句話說,只有當我們鏈接了Model3809.htm頁面後搜索引擎才會發現它。  
以前鏈接這種頁面時我們只需按照如下方式給出產品編號:“product.asp?Id=4”。現在我們就來構造一個以產品編號為參數返回恰當URL的函數。  
< %
Function CreateProductURL(lProductId)
 
strSQL = "SELECT Product_Model FROM Product " _ & "WHERE Product_Id =" & lProductId
 
Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then  
strModel = oRS("Product_Model")
End If

CreateProductURL = "/" & strModel & ".htm"
 
End Function
% >
現在如果我們要加入URL,只需按照如下方式進行:  
< A HREF="< %=CreateProductURL(4)% >" >洗碗機< /A >
本例我們假定不知道產品型號名稱,必須查詢數據庫才能得知。但在現實中可能並非如此,我們知道產品的型號名稱,可以直接創建URL而無需再次訪問數據庫。  
性能問題  
本文所介紹的方法會明顯地影響性能。首先,為了創建靜態風格的URL它需要一次數據庫調用。其次,為了從產生404的URL出發得到正確的URL,它還要增加一次額外的數據庫調用。最後,兩次Server.Transfer需要較大的開銷。  
不過,有些性能問題可以用XCache(www.postpointsoft.com)來解決。XCache能夠把出現404錯誤的URL轉換到正確的頁面,並緩存該信息以供後來的請求使用。  
實例  
請訪問http://www.kulshan.com,這是一個應用本文技術的例子。Kulshan.com的大多數分支頁面,如餐館、飯店的評論,都為了在搜索引擎中獲得更高的評價而使用了這種技術。Kulshan.com也使用了XCache。  
小結
利用IIS 5.0的自定義錯誤信息功能控制404錯誤可以為動態頁面制作出靜態頁面風格的URL。只要無需創建這些靜態URL所用到的目錄和文件,那麼應該說創建這種既利於市場宣傳、也利於搜索引擎排位的URL是相當簡單的。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved