http://www.shareb2c.com/b2c-artical-27
早就想將我們的網站實現靜態化,但是由於涉及到整體網站的修改,工作量巨大,需要較長時間,一直拖到現在。趁著我們進入淡季,終於把這件事完成了。
靜態化對於SEO的意義在於,搜尋引擎對連結中的問號,“&”號等比較感冒,因此不利於搜尋引擎對這些網頁的收錄,而且也會不計入內鏈數
量。據說google等正在改進對動態連結的支援,我沒有考證過。不過考慮到畢竟不止有google一個搜尋引擎,靜態化的工作還是必須的。
靜態化當然還有客戶介面更友好等優點,此處就不多詳述了。
實現靜態化有很多技術,比如套模板的方法,但是後期維護工作將十分麻煩。
最終,我還是選擇了方便的偽靜態化技術,即URL rewrite(URL重寫)。畢竟,我的目的只是seo。所謂偽靜態化,就是訪問者和搜尋引擎看不到問號和和號等了,但實際上頁面還是動態。
經比較實驗,選用了UrlRewriting.Net(我的網站基於.Net的 www.shirtonline.cn)。: http://www.urlrewriting.net/155/de/downloads.html
使用起來也很方便,只要把dll檔案放入bin目錄,然後在web.config中做好相應配置即可。主要是這幾段:
在<configuration>節點內加入
<!-- for url rewritingnet-->
<configSections>
<section name="urlrewritingnet"
requirePermission ="false"
type="UrlRewritingNet.Configuration.UrlRewriteSection,
UrlRewritingNet.UrlRewriter" />
</configSections>
<!-- end for url rewritingnet-->
在<system.web>節點內加入
<!-- for url rewritingnet-->
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
<!-- end for url rewritingnet-->
還是在<configuration>節點內加入(放在前面的configsections之後)
<!-- for url rewritingnet-->
<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage = "index.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07" >
<rewrites>
<add name="RewriteRule1"
virtualUrl="^~/(/d+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
<add name=" RewriteRule2"
virtualUrl="^~/website /(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website /default.aspx?id=$1"
ignoreCase="true" />
</rewrites>
</urlrewritingnet>
<!--end for url rewritingnet-->
上面每個 <add>都是一個重寫規則,你可以根據自己的要求增加規則。
你可以實現四種重寫
1、副檔名不變,如
<add name="RewriteRule1"
virtualUrl="^~/(/d+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重寫的結果是,把 類如 default.aspx?id=123456 的連結轉換成 123456.aspx
<add name=" RewriteRule2"
virtualUrl="^~/website /(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website /default.aspx?id=$1"
ignoreCase="true" />
重寫的結果是,把 類如 website/default.aspx?id=123456 的連結轉換成 website/123456/default.aspx
這類重寫在IIS上不必有其他設定,預設設定即可。有的虛擬機器主機可能需要被服務商修改過,則需進行如下設定:
網站管理->屬性->目錄->配置(G
)...->映射->應用程式擴充->副檔名 .aspx ->編輯->"確認檔案是否存在"複選框不選
2、把aspx重寫成html
<add name="RewriteRule3"
virtualUrl="^~/(/d+).html"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重寫的結果是,把 類如 default.aspx?id=123456 的連結轉換成 123456.html
需要在IIS配置如下:
網站->屬性->目錄->配置(G
)...->映射->應用程式擴充->添加
可執行檔:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll
副檔名:.html
動作:限制為 GET,HEAD,POST,DEBUG
指令碼引擎:選中
確認檔案是否存在:不選
3、任意副檔名重寫
<add name="RewriteRule4"
virtualUrl="^~/(/d+).myname"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重寫的結果是,把 類如 default.aspx?id=123456 的連結轉換成 123456.myname
IIS配置和重寫成html一樣。
4、重寫成路徑
<add name="RewriteRule5"
virtualUrl="^~ /(.+) "
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重寫的結果是,把 類如 default.aspx?id=123456 的連結轉換成 /123456
IIS配置:網站->屬性->目錄->配置(G
)...->映射->萬用字元應用程式對應->插入
可執行檔:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll
確認檔案是否存在:不選
注釋: 在IIS7
下面,重寫成路徑,即無副檔名的重寫設定如下 (參考 http://www.improve.dk/blog/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6
)
1、 進入iis7管理介面的 “處理常式映射”,找到 StaticFile ,進入編輯,將* 改為 *.* ,將 “要求節流”中的 “檔案或檔案加” 改選為 “檔案”
2、點擊右側 “添加指令碼映射”,請求路徑為 * , 可執行檔填入
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll
,“要求節流”中,去除 “僅當請求映射至.....”選項,自己取名字,如"all" 。確定儲存
3、點擊右側“查看經過排序的列表”,將剛才添加的 "all" 下移至 StaticFile 下面
以上三步即可
另:在iis7中,必須使用 “經典應用程式集區” 才可以實現url的重寫。
如果有多個參數,請參考如下例子,
<add name=" RewriteRule6"
virtualUrl="^~/website/(.*)/(.*)/(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website/default.aspx?id1=$1&id2=$2&id3=$3"
ignoreCase="true" />
上面 (.*)/(.*)/(.*) 的順序為依次 id1, id2, id3
重寫的結果是,把 類如 website/default.aspx?id1=12&id2=34&id3=56 的連結轉換成 website/12/34/56/default.aspx
以上規則涉及到Regex
寫法。請搜尋參考Regex教程。
本人網站對關鍵頁面都實現了重寫,對使用者帳戶網頁,則沒有重寫,省去部分工作量,呵呵。
另外,重寫會佔用伺服器資源,尤其是該寫成純路徑形式(上訴第4類重寫),會對每個圖片都進行重新導向,網上有解決方案。本人沒有實驗,讀者可去搜尋一下。
如果僅出於seo目的,那麼,不必非把aspx改寫成html,因為目前各主要搜尋引擎對aspx和html的支援度是一樣的。把問號,&號等去掉就可以了。但最好改寫成純路徑方式,因為對搜尋引擎來說,路徑的權重高於檔案的權重。
歡迎交流。