url重寫


 一. 為了頁面更有利於seo優化,url重寫程序需要做出的不可缺少的手段之一。

二.目前url重寫最常見的兩種方法有:

         1.通過熟悉頁面的內部執行流程,也就是asp.net請求管道中的相關知識點,進行url重寫。

         2.通過使用微軟提供的UrlRewriter.dll實現url重寫(簡單);

三、在請求管道中的第一個請求管道中攔截url並使其完成url重寫功能:

         1.熟悉請求管道實現程序運行的全過程:

(1):BeginRequest: 開始處理請求
(2):AuthenticateRequest授權驗證請求,獲取用戶授權信息
(3):PostAuthenticateRequest獲取成功
(4): AunthorizeRequest 授權,一般來檢查用戶是否獲得權限
(5):PostAuthorizeRequest:獲得授權
(6):ResolveRequestCache:獲取頁面緩存結果
(7):PostResolveRequestCache 已獲取緩存
(8):PostMapRequestHandler 創建頁面對象
(9):AcquireRequestState 獲取Session-----先判斷當前頁面對象是否實現了IRequiresSessionState接口,如果實現了,則從瀏覽器發來的請求報文體中獲得SessionID,並到服務器的Session池中獲得對應的Session對象,最后賦值給HttpContext的Session屬性
(10)PostAcquireRequestState 獲得Session
(11)PreRequestHandlerExecute:准備執行頁面對象
執行頁面對象的ProcessRequest方法
(12)PostRequestHandlerExecute 執行完頁面對象了
(13)ReleaseRequestState 釋放請求狀態
(14)PostReleaseRequestState 已釋放請求狀態
(15)UpdateRequestCache 更新緩存
(16)PostUpdateRequestCache 已更新緩存
(17)LogRequest 日志記錄
(18)PostLogRequest 已完成日志
(19)EndRequest 完成、

         2.直接上代碼:



網站結構圖:




using
System; using System.Collections.Generic; using System.Web; using System.Text; using System.Text.RegularExpressions; namespace UrlReWriter { class UrlWriter:IHttpModule { #region IHttpModule 成員 public void Init(HttpApplication context) { context.BeginRequest+=new EventHandler(context_BeginRequest); } void context_BeginRequest(object sender, EventArgs e) { //獲得當前頁面請求管道的HttpApplication對象 HttpApplication application = sender as HttpApplication; HttpContext context = application.Context;//獲得上下文對象 string url = context.Request.Url.LocalPath;//獲得URL(不包含域名和路徑) Regex reg1 = new Regex("/WebForm2/[A-Z0-9a-z_]+");//注意文件夾與文件名稱的大小寫. if (reg1.IsMatch(url)) //這種情況是匹配根據ID值來查看某個文章的內容。 { string strUserName = url.Substring(url.LastIndexOf('/')+1); context.RewritePath("/WebForm2.aspx?id=" + strUserName); //前台的列表頁就可以這樣寫:<a href='../WebForm2/<%#Eval("id")%>'></a> } else if (url.Contains("/admin")) //如果url中包含"/admin"字樣則轉向,實現用戶驗證,哈哈,不過這里是錯的,應為這個請求管道中還獲取不到session值呢,這個驗證最好在第九個請求管道(AcquireRequestState )中完成。 { context.RewritePath("/Error.aspx"); } } public void Dispose() { } #endregion } }


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="url重寫.WebForm1" %>

<!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></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <a href="WebForm2/12">重寫</a>   <!--這里是有利於seo的鏈接-->
    </div>
    </form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace url重寫
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Request.QueryString["id"]);           //在轉到的頁面輸出傳過來的參數
        }
    }
}


  <httpModules>
      <add name="UrlReWriter" type="UrlReWriter.UrlWriter,UrlReWriter"/>
    </httpModules>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
  </system.web>


note:記得在url重寫項目中引用UrlReWriter項目。否則httpModules接口沒有注冊,url重寫泡湯是必然的。呵呵



四、第二種重寫方式,是微軟提供的bll,很容易實現的,大家可以在網上查一下資料,很簡單的我就不寫了,如果不會也可以跟我留言,咱們再一起溝通的。。呵呵,886。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM