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

转载 2007年10月08日 16:24:00
 
有关于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>
          <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
<?xmlversion="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
效果出来了。
 

一个基于 EasyUI 的前台架构(4)主体页面框架收工

在上一篇博客已经完成一个大概的框架效果,还有一个最为重要的功能还没有完善——菜单。   我现在使用的这个项目使用的是 jQuery EasyUI 中的 Tree 来 Building 的一个树形菜单...
  • wilsonke
  • wilsonke
  • 2013年08月22日 01:16
  • 1215

Jenkins安装与配置

Jenkins安装与配置 发表于10个月前(2014-09-26 09:38) 阅读(3516) | 评论(1) 15人收藏此文章,我要收藏 赞1 目录[-] Jenkins...
  • zhousenshan
  • zhousenshan
  • 2015年07月22日 22:45
  • 3215

Android 4.4.源码 如何屏蔽Home键

做了一个锁屏app替换系统的app ,但是在应用层是无法屏蔽home键的,找了资料,改了源码,终于解决 代码位置 frameworks\base\policy\src\com\android\int...
  • qq_25815655
  • qq_25815655
  • 2016年06月03日 19:19
  • 1489

asp.net 返回上一页的实现方法小集(转)(http://www.cnblogs.com/liping19851014/archive/2007/07/14/818173.html)

返回上一页的这个东东在我们做项目的时候一般是用于填写完表单后确认的时候,有对原来输入的数据进行修改时用的,或者是因为网站为了方便浏览者而有心添加的一个东东,一般这种功能的实现在ASP.net中都是用一...
  • liulu132
  • liulu132
  • 2013年05月30日 11:28
  • 730

给没有源代码的.NET程序“打补丁“(转http://www.cnblogs.com/lerit/archive/2011/08/22/2148858.html#2182758)

公司为一个web应用程序写了一个注册机,基本原理是用户运行这个软件后,得到一个申请码,然后公司根据这个申请码给出相应注册码,匹配后方可正常使用web软件。在别人机子上没有问题,但是我机子上运行软件后死...
  • fjfdszj
  • fjfdszj
  • 2011年11月18日 15:51
  • 1208

http://www.cnblogs.com/YSO1983/archive/2010/06/10/1755665.html

下面我总结下我对out和ref引用参数的看法:  1.out和ref引用参数的相同点:都是通过引用传递参数给函数;  2.out和ref引用参数的不同点是:用ref引用传递参数,该参数必须经过初始...
  • jeksonal
  • jeksonal
  • 2013年05月08日 19:35
  • 1091

http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html

目录 Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器 Java垃圾回收概况   Java GC(Garbage Collectio...
  • he_you_qing
  • he_you_qing
  • 2016年08月04日 09:45
  • 836

http://www.cnblogs.com/dotnetdoor/archive/2008/06/09/1216125.html

1 引言      Java的一个重要优点就是通过垃圾收集器GC (Garbage Collection)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java 不存在...
  • u011821510
  • u011821510
  • 2015年05月18日 19:34
  • 352

http://www.cnblogs.com/luxiaoxun/archive/2013/06/07/3124948.html

在Java 中定义了关键字final,被final修饰的类不能被继承。 首先想到的是在C++中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类...
  • epxytk
  • epxytk
  • 2017年03月13日 17:09
  • 95

http://www.cnblogs.com/xuxiang/archive/2013/06/14/3136917.html

在更新源的时候,经常遇到这种情况 W: 无法下载 bzip2:/var/lib/apt/lists/partial/mirrors.ustc.edu.cn_ubuntu_dists_quantal...
  • evelyn_2014
  • evelyn_2014
  • 2016年11月09日 18:34
  • 77
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.net的RUL重写http://www.cnblogs.com/hd/archive/2005/06/20/177633.html
举报原因:
原因补充:

(最多只允许输入30个字)