1.建Global.asax文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Configuration;
using System.Text.RegularExpressions;
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
UrlRewriter.Rewrite(context);
}
2.建UrlRewriter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Xml.Linq;
using System.Text.RegularExpressions;
namespace Web
{
public class UrlRewriter
{
static string GetConfig()
{
if (HttpContext.Current.Cache["RewriterConfig"] == null)
{
HttpContext.Current.Cache.Insert("RewriterConfig", File.ReadAllText(HttpContext.Current.Server.MapPath("/RewriteRules.xml")));
}
return HttpContext.Current.Cache["RewriterConfig"].ToString();
}
public static void Rewrite(HttpContext context)
{
var xml = XDocument.Parse(GetConfig());
var rules = from item in xml.Element("RewriterConfig").Elements("Rules").Elements("RewriterRule")
select new {
LookFor = item.Element("LookFor").Value,
SendTo = item.Element("SendTo").Value
};
foreach (var rule in rules)
{
Regex regex = new Regex("^" + rule.LookFor + "$", RegexOptions.IgnoreCase);
if (regex.IsMatch(context.Request.Path))
{
string url = regex.Replace(context.Request.Path, rule.SendTo);
context.RewritePath(url);
break;
}
}
}
}
}
3.建RewiteRulex.xml
<?xml version="1.0" encoding="utf-8" ?>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>/news/</LookFor>
<SendTo>~/news.aspx</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>/news/(\d+).html</LookFor>
<SendTo>~/newscont.aspx?id=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>/aboutus/</LookFor>
<SendTo>~/aboutus.aspx</SendTo>
</RewriterRule>
</Rules>
<Rules>
<RewriterRule>
<LookFor>/contact/</LookFor>
<SendTo>~/contact.aspx</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>