正文

ASP.net的URL重写2006-08-10 14:48:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/Csharpsky/17458.html

分享到:

ASP.net的RUL重写


有关于URL的重写,本文也只是拿来主意。相继有MS的组件“URLRewriter”和在Global.asax里的“Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。

娜列下来,实现方法也都很简单。



方法一:MS组件

这里也不用详解了,相关请看:

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

用法很简单,只需要把组件URLRewriter.dll拷到应用程序的bin目录下,然后在web.config下加入如下代码:

中加入:















~/(\d{4})/(\d{2})/Default\.aspx

~/Default.aspx?ID=$1







然后在中加入:




type="URLRewriter.RewriterFactoryHandler, URLRewriter" />





最后在地址栏上键入:http://localhost/Test/2004/12/News.aspx

效果出来了。

上面的~/(\d{4})/(\d{2})/News\.aspx这句这正则表达式URL,即被重写的URL,而~/Default.aspx?ID=$1这一句为原始URL地址。其中的$1为第一个正则表达式值(上面例子为:2004),以此类推,第二个即为$2



方法二:Application_BeginRequest()

在应用程序中新建一个XML文件,文件内容为:文件名ReWriter.config







(.*)/News/(\d{4})/Default\.aspx

../../Default.aspx?id=$2&type=$3





在Global.asax文件中的Application_BeginRequest(Object sender, EventArgs e)加入代码:

try

{

string path=Server.MapPath("~/ReWriter.config");

XPathDo***ent myXPathDo***ent = new XPathDo***ent(path);

XPathNavigator myXPathNavigator = myXPathDo***ent.CreateNavigator();

XPathNodeIterator myXPathNodeIterator = myXPathNavigator.Select ("//rule");

System.Text.RegularExpressions.Regex oReg;

string ReWriteUrl;

while (myXPathNodeIterator.MoveNext())

{

//oReg=new Regex(oNode.SelectSingleNode("url/text()").Value);

XPathNavigator nav2 = myXPathNodeIterator.Current.Clone();

string oldString="",newString="";

XPathNodeIterator it2 = nav2.Select("old");

while(it2.MoveNext())

{

oldString = it2.Current.Value;

break

}

it2 = nav2.Select("new");

while(it2.MoveNext())

{

newString = it2.Current.Value;

break

}

if(oldString != "" && newString != "")

{

oReg = new System.Text.RegularExpressions.Regex(oldString);

if(oReg.IsMatch(Request.Url.ToString()))

{

ReWriteUrl = oReg.Replace(Request.Url.ToString(),newString);

HttpContext.Current.RewritePath(ReWriteUrl);

break

}

}

}

}

catch

{

}

阅读(2768) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册