UrlRewritingNet 完美實現 ASP.NET 2.0 中的URL重寫(映射)

來源:互聯網
上載者:User

URL重寫好處有很多,如有利於SEO、便於記憶、隱藏真實路徑使安全性提高、便於更新等等。本文概要描述了各種URL重寫的實現。
  ASP.NET 2.0 中實現URL重寫有很多方法,如:Global.asax中捕獲用Application_BeginRequest請求,再用HttpContext類的Rewrite方法或Server.Transfer方法實現重寫;自己實現IHttpModule實現重寫;還有的利用伺服器的404錯誤引導到新的頁面實現重寫;最後就是用組件實現重寫(基本原理大多也是實現IHttpModule、IHttpHandler介面處理請求)。
  如果自己處理請求,實現起來麻煩,特別是在大項目中,做好使用組件實現。網上有很多開源或免費的實現URL重寫的組件,選擇餘地特別大。當初我選擇的標準是小巧、快速、實現常用的URL重寫功能。經過比較選擇了只有32KB大小的UrlRewritingNet。
查看其文檔主要功能有以下一些:

1.基於Regex的重寫
2.支援Themes和主版頁面
3.支援輸出緩衝
4.支援信任層級為"Medium"的使用環境
5.支援Postback
6.支援無Cookie的Session
7.運行時添加、修改改寫規則
8.容易安裝使用

OK!功能完全夠用,就選他了!

Web.config中的配置:

<configuration>
  <configSections>
    <section name="urlrewritingnet"  
             requirePermission ="false"
             type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"  />
  </configSections>
  <urlrewritingnet
    rewriteOnlyVirtualUrls="true"  
    contextItemsPrefix="QueryString"
    defaultPage = "Default.aspx"
    defaultProvider="RegEx"
    xmlns="http://www.urlrewriting.net/schemas/config/2006/07" >
    <rewrites>
      <add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"
           rewriteUrlParameter="ExcludeFromClientQueryString"
           destinationUrl="~/Default.aspx?ID=$1"
           ignoreCase="true" />
      <!--更多重寫規則-->
    </rewrites>
  </urlrewritingnet>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <httpModules>
        <add name="UrlRewriteModule"
           type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
      </httpModules>
        <!--
            設定 compilation debug="true" 將偵錯符號插入
            已編譯的頁面中。但由於這會
            影響效能,因此只在開發過程中將此值
            設定為 true。
        -->
        <compilation debug="true" />
        <!--
            通過 <authentication> 節可以配置 ASP.NET 使用的
            安全身分識別驗證模式,
            以標識傳入的使用者。
        -->
        <authentication mode="Windows" />
        <!--
            如果在執行請求的過程中出現未處理的錯誤,
            則通過 <customErrors> 節可以配置相應的處理步驟。具體說來,
            開發人員通過該節可以配置
            要顯示的 html 錯誤頁
            以代替錯誤堆疊追蹤。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
    </system.web>
</configuration>

測試用的檔案:Default.aspx

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>URL 重寫測試 飄遙 http://xianfen.net</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <%
                Response.Write("原始URL:" + Request.RawUrl + "<br />");
                Response.Write("擷取的ID:" + Request.QueryString["ID"]);        
            %>
        </div>
    </form>
</body>
</html>

 (一)、副檔名不變的重寫:
重寫規則:

<add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />

IIS配置:(此配置應該為預設配置,但有的虛擬機器主機供應商修改了此配置)
網站->屬性->目錄->配置(G)...->映射->應用程式擴充->副檔名 .aspx ->編輯->"確認檔案是否存在"複選框不選
運行結果:

(二)、偽靜態重寫,副檔名為.html等
重寫規則:

<add name="RewritePhoto" virtualUrl="^~/(\d+).html"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />

IIS配置:網站->屬性->目錄->配置(G)...->映射->應用程式擴充->添加
可執行檔:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
副檔名:.html
動作:限制為 GET,HEAD,POST,DEBUG
指令碼引擎:選中
確認檔案是否存在:不選
運行結果:

(三)、任意副檔名的重寫 如:副檔名為.zxjay
重寫規則:

<add name="Rewrite1" virtualUrl="^~/(\d+).zxjay"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />  

IIS配置:同上
運行結果:

(四)、無尾碼的重寫
重寫規則:

<add name="Rewrite1" virtualUrl="^~/(\d+)/Default.aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />

IIS配置:網站->屬性->目錄->配置(G)...->映射->萬用字元應用程式對應->插入
可執行檔:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
確認檔案是否存在:不選


其原理是:請求"目前的目錄"時,尋找預設文件,實現重寫,因此重寫規則中的"^~/(\d+)/Default.aspx"要與第一個預設文件相對應。
關於“萬用字元應用程式對應”的詳細資料可參考微軟的說明
運行結果:

(五)、次層網域到多級網域名稱的重寫
(注意:由於條件的限制,該規則沒有測試,理論上可以實現,如果有錯誤,請留言指正,謝謝!)
重寫規則:

<add name="Rewrite1" virtualUrl="^http\://(.*).xianfen.net/Default.aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.