SEO實戰之:URL重寫實現動態網頁面靜態化

來源:互聯網
上載者:User

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&amp;id2=$2&amp;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的支援度是一樣的。把問號,&號等去掉就可以了。但最好改寫成純路徑方式,因為對搜尋引擎來說,路徑的權重高於檔案的權重。

 

 

歡迎交流。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.