ASP.net的URL重写

ASP.net URL 重写

 

有关于 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 下加入如下代码:

< configuration ></ configuration > 中加入:

     < configSections >

          < section name ="RewriterConfig" type ="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

     </ configSections >

    

     < RewriterConfig >

          < Rules >

              < RewriterRule >

                   < LookFor > ~/(/d{4})/(/d{2})/Default/.aspx</ LookFor >

                   < SendTo > ~/Default.aspx?ID=$1</ SendTo >

              </ RewriterRule >

          </ Rules >

     </ RewriterConfig >

 

 

然后在 < system.web ></ system.web > 中加入:

< httpHandlers >

   < add verb ="*" path ="*.aspx"

        type ="URLRewriter.RewriterFactoryHandler, URLRewriter" />

</ httpHandlers >

 

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

效果出来了。

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

 

方法二: Application_BeginRequest()

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

<? xml version ="1.0" encoding ="utf-8" ?>

< ReWriterUrls >

     < rule >

          < old > (.*)/News/(/d{4})/Default/.aspx</ old >

          < new > ../../Default.aspx?id=$2&amp; type=$3</ new >

     </ rule >

</ ReWriterUrls >

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

              try

              {

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

                   XPathDocument myXPathDocument = new XPathDocument(path);

                   XPathNavigator myXPathNavigator = myXPathDocument.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

              {

              }

 

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

效果出来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值