看到有很多網站都用到了URL重寫的功能,在網上找了很多資料,實現的方法有多種,可是大部分都很難理解,過程也比較復雜,不過我找到一種很簡單也很容易理解的實現URL重寫的方法,只需要在global.asax.cs文件中添加一個函數就可以實現,下面的代碼是我根據在網上找到的代碼寫的,用在了我做的一個網站上,當然因為我的需求不同,跟原來的代碼有點變化,如下:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string oldUrl = HttpContext.Current.Request.RawUrl;
string pattern = @"^(.+)News(d+).html(?.*)*$";
string replace = "$1NewsDetails.aspx?NID=$2";
string patternCul = @"^(.+)Culture(d+).html(?.*)*$";
string replaceCul = "$1CultureDetails.aspx?CID=$2";
if (Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, pattern, replace,
RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
if (Regex.IsMatch(oldUrl, patternCul, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, patternCul, replaceCul,
RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
這裡我實現了2個地址的URL重寫,看第一個的效果就是當我在地址欄訪問:/News12.html的時候,其實訪問的地址是:NewsDetails.aspx?NID=12這個地址,(仔細琢磨一下代碼就可以看明白了,不用我多說了吧:))就這樣簡單的實現了URL的重寫,我個人認為這樣重寫之後有一個好處,我把GET方法傳遞的參數變量給隱藏起來了,增強了安全性,還有給人一種誤會認為你的網站是靜態的,呵呵....
當然借助於強大的正則表達式,你只要寫好patten,replace裡面的正則,那麼網頁就可以按照你任何想要的方式進行重寫,當然這要在服務器支持的前提下.