程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Step1數據系統技術(1.基於404錯誤的URL重寫技術)

Step1數據系統技術(1.基於404錯誤的URL重寫技術)

編輯:關於ASP.NET

現在第一篇,討論我的網站之中使用的URL重寫技術,實際上,該技術並不是我編寫的,可能有用戶能夠記得,我的網站www.step1.cn原來就是一個博客,那個時候采用的系統是博客園提供的cnblogs程序(我將這個程序改裝成能夠在當時的虛擬主機上運行,可花了不少功夫),後來我將博客遷到這裡之後,對Step1.cn進行大的改版,當時我實在捨不得這套博客程序之中使用的URL重寫的技術,因此專門的從那個cnblogs程序之中將相關的代碼從其中拆分出來成一個DLL類,在我的網站使用URL重寫技術。

當時由於cnblogs.cn這個程序結構相當優秀,所以我更改的並不多,主要有以下幾點:

1.基於404錯誤的URL重寫技術。因為有的虛擬主機並不支持URL重寫技術,尤其是你要對靜態的HTML文件進行URL重寫(當然我並沒有使用這個技術),可是基本上沒有虛擬主機支持對靜態的HTML文件進行URL重寫(至少我沒有用過),於是我想到了一個變通的方法,那就是修改服務器的404錯誤頁面的設置,將該設置指向到一個特定的ASPX文件,再在ASPX文件之中調用cnblogs的URL重寫程序。

Error404.aspx的對應類代碼:

1  public class Error404 : System.Web.UI.Page
2  {
3    private void Page_Load(object sender, System.EventArgs e)
4    {
5      if(Request.QueryString!=null)
6      {
7        string[] queryString=Request.RawUrl.Substring(Request.RawUrl.IndexOf("?")+1).Split(new char[]{';'});
8        if(queryString.Length==2 && queryString[0]=="404")
9        {
10          Uri uri=new Uri(queryString[1]);
11          string query=uri.Query;
12          if(query.StartsWith("?"))
13            query=query.Substring(1);
14          this.Context.RewritePath(uri.AbsolutePath,uri.UserInfo,query);
15          (new UrlReWriteHandlerFactory()).GetHandler(this.Context,Request.RequestType,uri.PathAndQuery,Server.MapPath(uri.LocalPath)).ProcessRequest(this.Context);
16          this.Context.Response.End();
17        }
18      }
19    }
20  }

我剛才看了一下,剩下的代碼由於大部分摘自cnblogs的源碼,而我更改的部分都很小,因此我不在本文之中提供源碼,如果確有需要,可以首先去參考cnblogs的源碼,也可以發郵件向我索取該部分的源碼,我可以直接提供。

總體上來講,該URL重寫機制,通過在Web.Config文件之中添加類似於如下的配置來實現對應的URL重寫的功能:

1<HttpHandlerpattern="^/place/cn/([%0-9a-zA-Z/]*).aspx$"type="Step1.UrlRewriter.PageHandlerFactory,Step1.UrlRewriter"handlerType="Redirect"pageLocation="/place/Place.aspx?p=$1"/>
2

以上的配置,會將網址/place/cn/aaaaaaa.aspx自動在服務端轉向到/place/Place.aspx?p=aaaaaaa

詳細的內容,可能我在後面講解其他的技術的時候會重新提到。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved