ASP.NET中实现二级或多级域名(修改UrlRewrite)

ASP.NET中实现二级或多级域名(修改UrlRewrite) 
 
摘自:http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html 
 
大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 http://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。 

要实现这个功能,前提条件就是  http://www.abc.com/ 是泛解析的,再就是要修改一下URLRewriter了。 
总共要修改2个文件 

1.BaseModuleRewriter.cs 

ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗        ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            HttpApplication app = (HttpApplication) sender; 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            Rewrite(app.Request.Path, app); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗        } 

改为 

ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗        ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            HttpApplication app = (HttpApplication) sender; 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            Rewrite(app.Request.Url.AbsoluteUri, app); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗        } 


就是将  app.Request.Path 替换成了  app.Request.Url.AbsoluteUri 

2.ModuleRewriter.cs 

ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗for(int i = 0; i < rules.Count; i++) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules.LookFor) + "$"; 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                // Create a regex (note that IgnoreCase is setASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                Regex re = new Regex(lookFor, RegexOptions.IgnoreCase); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                // See if a match is found 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                if (re.IsMatch(requestedPath)) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    // match found - do any replacement needed 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules.SendTo)); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    // log rewriting information to the Trace object 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    app.Context.Trace.Write("ModuleRewriter", "Rewriting URL to " + sendToUrl); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    // Rewrite the URL 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    RewriterUtils.RewriteUrl(app.Context, sendToUrl); 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                    break;        // exit the for loop 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                } 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            } 

改为 

ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗for(int i = 0; i < rules.Count; i++) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗            ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory) 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                string lookFor = "^" + rules.LookFor + "$"; 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗 
ASP.NET中实现二级或多级域名(修改UrlRewrite) - luiweiping-002 - 〖下里巴人〗                // Create a regex (note that IgnoreCase& ...
posted @ 2009-01-05 23:46  下里巴人or知己  阅读(148)  评论(0编辑  收藏  举报