在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
有关于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&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 效果出来了。 |
请发表评论