URL重寫 HttpModule進階和dll重寫

 URL重寫

URL重寫,實質上是將網頁真實的URL隱藏起來,使用戶通過相應的虛擬URL訪問網頁資源,以彌補真是URL的許多不足

     好處:

        1.滿足搜索引擎需要,實現搜索引擎中的排名優化


        很多搜索引擎不支持動態鏈接無法抓去動態網頁,尤其是帶“?”查詢參數的網頁,而且靜態網頁優先度高於動態網頁


        2.隱藏網頁實現技術,增強網頁安全性


        如果網頁上含jsp或aspx  製作網站的技術一目瞭然。但如果將頁面重寫  黑客將無法知曉網頁技術,大大降低網頁收到攻擊的可能性


        3.提高網站的可用性和專業性


        太長的URL會給網站帶來可用性問題


        4.使用URL支持“可刪減”的需求


        很多搜索引擎不支持動態鏈接無法抓去動態網頁,尤其是帶“?”查詢參數的網頁,而且靜態網頁優先度高於動態網頁


        如果網頁上含jsp或aspx  製作網站的技術一目瞭然。但如果將頁面重寫  黑客將無法知曉網頁技術,大大降低網頁收到攻擊的可能性



使用HttpModule實現URL重寫

代碼實例


<div>
        <a href="goods_1.html">1</a>
         <a href="goods_2.html">2</a>  
</div>


namespace ch3
{
    public class GOODHT : IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            //請求處理之前觸發的事件
            context.BeginRequest += context_beginRequest;
        }

        void context_beginRequest(object sender,EventArgs e) {
            HttpApplication app = sender as HttpApplication;
            //獲取請求的原始的URL
            string url = app.Request.RawUrl;
            //正則表達式:.../goods_1.html
            Regex regex = new Regex(@"\w+_\d+\.html");
            if (regex.IsMatch(url))
            {
                //如果符合格式,則需要進行URL重寫
                //截取URL中的編號
                int line = url.LastIndexOf("_");
                int dot = url.LastIndexOf(".");
                string id = url.Substring(line + 1, dot - line - 1);
                //拼接真實的URL
                string dcURL = "Good.aspx?id=" + id;
                //跳轉 Server.Transfer
                app.Server.Transfer(dcURL);
            }
        }
    }
}

//節點配置

<system.webServer> 
    <modules>
      <add name="url" type="ch3.GOODHT"/>
    </modules>
  </system.webServer>



使用URLRewriter.dll實現URL重寫

只要在Web.config文件中添加URL重寫規則    

        1.下載URLRewriter.dll  
        下載地址 http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cg/MSDNURLRewriting.nsu
        

        2.在網站中添加引用URLRewriter.dll


        3.在網站中添加頁面


        4.web.config文件中配置使用URLRewriter.dll


          將configSections節點作爲configuration的第一個子節點進行添加


          用於指定配置節RewriterConfig的處理程序類的名稱爲URLRewriter.Config.Rewriter.ConfigSerializerSectionHandler


          將所有擴展名爲.html文件的HTPP請求映射到類 URLRewriter.RewriterFactoryHandler中添加規則



代碼示例

       
 <div>
        <a href="goods_1_45.html">1</a>   
    </div>


節點配置

  <!--dll重寫URL 必須放低一個-->
  <configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>
  <!--規則-->
  <RewriterConfig>
    <Rules>
      <RewriterRule>
        <LookFor>~/goods_(\d)+\.html</LookFor>
        <SendTo>~/Good.aspx?id=$1</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>~/goods_(\d)_(\d+)+\.html</LookFor>
        <SendTo>~/Good.aspx?id=$1&id2=$2</SendTo>
      </RewriterRule>
    </Rules>
  </RewriterConfig>

  

  <system.webServer>
    <handlers>
      <add verb="*"  path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" name ="urlrewriter"/>
    </handlers>
  </system.webServer>


實現多個參數URL重寫
        多個參數用&amp;間隔   (URL中連接多個參數&)取值爲()裏面的值

例如

<LookFor>~/goods_(\d)_(\d)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1&pwd=$2</SendTo>



發佈了44 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章