同學說,他的網站被google收錄的很少,我研究了一下,發現那個網站基本都是動態網頁面+參數的方式來實現的,這種網站當然不被google看好,於是給他最佳化了一下,改了一些代碼,通過虛擬靜態網頁的方式來進行資訊的顯示,下面是最佳化的理論和一些代碼:
基於動態網頁面的靜態頁面實現
中國二手市場網站http://www.2shoushichang.com/ 小胖著 轉貼標明出處
我們大家都知道,搜尋引擎對於靜態頁面有異乎尋常的熱愛,特別是google,更是如此;
而我們通常所作的網站中,大部分都是動態,一般通過參數的方式來進行動態網頁面的顯示的,那麼我們能不能通過一種簡單的辦法來達到產生靜態網頁的目的呢?特別是對於虛擬機器主機的使用者,沒有太多的空間,又不能對伺服器配置變更,這個難度就比較大了.
下面,我已親身經曆,來詳細描述一下實現的原理和具體做法:
我們已中國二手市場為例來說明.
中國二手市場http://www.2shoushichang.com/也是一個專著於二手資訊的網站,從大的方面來說也算是分類資訊網站,一開始也是採用動態網頁的模式,通過參數的方式來實現二手資訊的展示的.
比如,如果我們想查看電腦分類的所有資訊,需要下面的串連http://www.2shoushichang.com/BigTypeList.aspx?id=100,如果想看更細的筆記本的分類需要開啟下面的串連:http://www.2shoushichang.com/MidtypeList.aspx?id=100102,同樣,如果想查看手機/mp3等的資訊,需要在參數id後面跟上不同的類別id.我想,在分類資訊裡面,這種形式至少要佔到95%以上,別的資訊類網站,大部分也是採用的這種方式.
但是,對於spliter來說,他們不理解參數的意思,一般一個分類只採集一頁或幾頁,很少能全部採集的(好像baidu比較喜歡採集).設想一下如果我們按照另外一種方式來處理,比如,對於電腦分類,第一頁我們可以這種來設計:http://www.2shoushichang.com/bigtype/s-100-all-1.aspx能不能更好呢.我對於這個地址給大家詳細解釋一下:
其中,bigtype表示分類,表示要對資訊類別中的大類進行處理,後面的s表示出售資訊,100表示資訊類別的id(這裡表示電腦),all表示所有的地區,1表示第一頁,這樣,這一個地址就表示了
http://www.2shoushichang.com/BigTypeList.aspx?id=100&page=1這樣一個地址.
同樣http://www.2shoushichang.com/Midtype/s-101100-qingdao-3.aspx表示的是查詢青島地區手機類別的第三頁,它取代的地址是http://www.2shoushichang.com/Mid ... p;type=s&Page=3
通過這種方式,我們就可以把所有查詢都統一成固定地址的網頁.
當然,對於顯示資訊的頁,如http://www.2shoushichang.com/Product.aspx?id=10864,我們可以處理成這樣http://www.2shoushichang.com/Product/10864.aspx這種方式.
這樣,我們就可以把我們網站上幾乎所有需要動態處理的地方,已靜態網頁的方式來實現了.
可能有人會說,這也太麻煩了,我需要建立多少網頁啊,需要佔用多少空間呀!!!
其實,不麻煩,不用額外佔用任何空間,也不用真實的建立任何網頁,你所有的程式幾乎都不用動,只需要在Global.asax加上幾行代碼就行了.
不信,我們就繼續闡述一下具體實現方法.
我們是通過捕獲使用者的請求,然後通過RewritePath來實現的:
這是我程式中的一段代碼,它就負責把上面的那些請求轉化為真正的頁面請求,
我們是通過Regex來區分各種類別的請求的:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string url = Request.Url.AbsoluteUri ;
string strMatch = @"http://www/.2shoushichang/.com/([^/]+)/" ;
string newUrl = "" ;
string strCmd = SplitInfo(url,strMatch) ;
if (strCmd != null)
{
switch(strCmd.ToLower())
{
case "product":
strMatch = @"/product/(/d+)/.aspx" ;
string strProductId = SplitInfo(url,strMatch) ;
if (strProductId != null)
{
newUrl = string.Format("..//Product.aspx?id={0}",strProductId) ;
this.Context.RewritePath(newUrl) ;
}
break ;
case "midtype"://s-100100-All-2.aspx
strMatch = @"/midtype/(/S+-/d+-/S+-/d+)/.aspx" ;
string strResult = SplitInfo(url,strMatch) ;
if (strResult != null)
{
string[] strParam = strResult.Split('-') ;//MidtypeList.aspx?id=100100&city=威海&type=s&Page=3
if (strParam.Length != 4)
break ;
string city = AppGlobal.GetCityNameByCode(strParam[2]) ;
newUrl = string.Format("..//MidtypeList.aspx?type={0}&id={1}&city={2}&page={3}",strParam[0],strParam[1],city,strParam[3]) ;
this.Context.RewritePath(newUrl) ;
}
break ;
case "其它處理":
break;
default:
break ;
}
}
}