ASP.net的RUL重写http://www.cnblogs.com/hd/archive/2005/06/20/177633.html

 
有关于URL的重写,本文也只是拿来主意。相继有MS的组件“ URLRewriter”和在Global.asax里的“ Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。
娜列下来,实现方法也都很简单。
 
方法一:MS组件
这里也不用详解了,相关请看:
用法很简单,只需要把组件URLRewriter.dll拷到应用程序的bin目录下,然后在web.config下加入如下代码:
< configuration ></ configuration > 中加入:
     <configSections>
          <sectionname="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 >
   <addverb="*"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、付费专栏及课程。

余额充值