zoukankan      html  css  js  c++  java
  • 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下加入如下代码:

    <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>http://www.cnblogs.com/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

    效果出来了。

  • 相关阅读:
    在Ubuntu 桌面版 12.04 LTS安装并运行SSH
    将Tp-link无线路由器桥接到Dlink无线路由器上
    如何解决Win7将任务栏程序自动分组的困扰
    安装Ubuntu 桌面版 12.04 LTS 过程之记录
    #lspci | grep Eth
    做技术不能人云亦云
    如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
    在Fedora8上安装使用ActiveMQ5.8
    多态继承中的内存图解 && 多态中的对象变化的内存图解
    孔子装爹案例_帮助理解多态的成员访问特点及转型
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2047160.html
Copyright © 2011-2022 走看看