用靜態URL顯示動態網頁

來源:互聯網
上載者:User
動態|靜態|網頁|顯示|靜態 動態產生的網頁在構造真正大型的網站時是不可缺少的。但是,動態網頁面的名字(即它的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是相當簡單的。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。