[ASP.net]ASP.net的RUL重写
?
ASP.net的RUL重寫<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
有關于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&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
效果出來了。
轉載于:https://www.cnblogs.com/HD/archive/2005/06/20/177633.html
總結
以上是生活随笔為你收集整理的[ASP.net]ASP.net的RUL重写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页中自动换行问题〔zz〕
- 下一篇: UML 中各种图形重要性的排行