关于urlrewrite的小DEMO
代码
public string Path
{
get { return Server.MapPath("~/rewrite.config"); }
}
protected void Application_BeginRequest(object sender,EventArgs e)
{
string originalurl, newurl;
originalurl = Request.Url.PathAndQuery;
RewriteConfig config = new RewriteConfig(this.Path);
newurl=config.MappingUrl(originalurl);
HttpContext.Current.RewritePath(newurl);
}
RewriteConfig 类
namespace UrlRewrite
{
/// <summary>
/// 默认页的枚举
/// </summary>
public enum Mapped
{
defaultPage = "~/Default.aspx"
}
public class RewriteConfig
{
/// <summary>
/// 初始化一个xmldoc对象
/// </summary>
XmlDocument XmlDoc=new XmlDocument();
/// <summary>
/// 文件名称
/// </summary>
string filePath;
public string FilePath
{
get { return filePath; }
set { filePath = value; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="filePath">文件地址</param>
public RewriteConfig(string filePath)
{
this.FilePath = filePath;
}
public RewriteConfig() { }
/// <summary>
/// 将文件加载到xmldoc中
/// </summary>
public void LoadConfig()
{
this.XmlDoc.Load(this.FilePath);
}
/// <summary>
/// 匹配规则,得到真实的请求url
/// </summary>
/// <param name="originalUrl"></param>
/// <returns></returns>
public string MappingUrl(string originalUrl /*来源url*/)
{
this.LoadConfig();
XmlNodeList rulesList = this.AllMappingRegulation();
if (rulesList == null)
{
return Mapped.defaultPage ;
}
foreach (XmlNode regulars in rulesList)
{
XmlNodeList regular = regulars.ChildNodes;
Regex reg = new Regex(regular[0].InnerText);
if (reg.IsMatch(originalUrl)) //如果来源页与规则匹配
{
return Regex.Matches(originalUrl,regular[0].InnerText)[0].Result(regular[1].InnerText); //关键的替换工作
}
}
return Mapped.defaultPage ;
}
/// <summary>
/// 得到所有的规则
/// </summary>
/// <returns></returns>
public XmlNodeList AllMappingRegulation()
{
XmlNodeList list = this.XmlDoc.SelectSingleNode("urlrewrites").ChildNodes;
if (list != null)
{
return list;
}
else
{
return null;
}
}
}
}
映射规则
<?xml version="1.0" encoding="utf-8"?>
<urlrewrites>
<rule>
<source>/default.aspx</source>
<target>~/default.aspx</target>
</rule>
<rule>
<source>/urlrewriter/show(.*)\.asp</source>
<target>show.aspx?$1</target>
</rule>
<rule>
<source>/urlrewriter/(.*)show\.html</source>
<target>show.aspx?id=$1&cat=2</target>
</rule>
<rule>
<source>/urlrewriter/s/h/o/w/(.*)\.html</source>
<target>/urlrewriter/show.aspx?id=$1</target>
</rule>
</urlrewrites>
不知道读取。config文件还有没有其他的好方法阿。
希望大家可以提意见大家多交流,共同进步啊。