江大鱼:URLRewrite

mac2022-06-30  17

大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 http:// www.abc.com/1234/  重写为 http://www.abc.com/show.aspx?id=1234  但不能将 http://1234.abc.com  重写为  http://www.abc.com/show.aspx?id=1234。 要实现这个功能,前提条件就是  www.abc.com 是泛解析的,再就是要修改一下URLRewriter了。 总共要修改2个文件 1.BaseModuleRewriter.cs protected   virtual   void  BaseModuleRewriter_AuthorizeRequest( object  sender, EventArgs e)          {             HttpApplication app = (HttpApplication) sender;             Rewrite(app.Request.Path, app);         } 改为 protected   virtual   void  BaseModuleRewriter_AuthorizeRequest( object  sender, EventArgs e)          {             HttpApplication app = (HttpApplication) sender;             Rewrite(app.Request.Url.AbsoluteUri, app);         } 就是将  app.Request.Path 替换成了  app.Request.Url.AbsoluteUri 2.ModuleRewriter.cs for ( int  i  =   0 ; i  <  rules.Count; i ++ )              {                 // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)                 string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";                 // Create a regex (note that IgnoreCase is set)                 Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);                 // See if a match is found                 if (re.IsMatch(requestedPath))                 {                     // match found - do any replacement needed                     string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));                     // log rewriting information to the Trace object                     app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);                     // Rewrite the URL                     RewriterUtils.RewriteUrl(app.Context, sendToUrl);                     break;        // exit the for loop                 }             } 改为 for ( int  i  =   0 ; i  <  rules.Count; i ++ )              {                 // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)                 string lookFor = "^" + rules[i].LookFor + "$";                 // Create a regex (note that IgnoreCase is set)                 Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);                 // See if a match is found                 if (re.IsMatch(requestedPath))                 {                     // match found - do any replacement needed                     string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));                     // log rewriting information to the Trace object                     app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);                     // Rewrite the URL                     RewriterUtils.RewriteUrl(app.Context, sendToUrl);                     break;        // exit the for loop                 }             } 将 string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$"; 改成了 string lookFor = "^" + rules[i].LookFor + "$"; 完成这2处改动之后重新编译项目,将生成的dll复制到bin目录下。 再就是写web.config里的重写正则了 < RewriterRule >              < LookFor > http://(\d+)\.abc\.com </ LookFor >              < SendTo > /show.aspx?id=$1 </ SendTo >          </ RewriterRule > 好了大功告成,你在IE地址栏输入 http://1234.abc.com,就可以看到 http://www.abc.com/show.aspx?id=1234 的结果了 若你在实际应用中碰到了问题,请查看文章 "修改UrlRewrite以对域名进行重写"需要注意的问题 ,希望能够帮助你! 附: URLRewriter 的相关资料 http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

转载于:https://www.cnblogs.com/Jwin/archive/2007/02/28/660182.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)