码迷,mamicode.com
首页 > Web开发 > 详细

UrlRewriter.dll伪静态实现二级域名泛解析

时间:2015-03-21 18:24:29      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,

如:可将 http://http://www.115sou.com/qq/  重写为 http://www.115sou.com/show.aspx?id=qq

但不能将 http://qq.115sou.com/  重写为  http://www.115sou.com/index.aspx?id=qq。 


要实现这个功能,前提条件就是  http://www.115sou.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+)\.115sou\.com/</LookFor>
技术分享            <SendTo>/show.aspx?id=$1</SendTo>
技术分享        </RewriterRule>



好了大功告成,你在IE地址栏输入http://shouji.115sou.com/,就可以看到http://www.115sou.com/index.aspx?id=shouji

的结果了 

UrlRewriter.dll伪静态实现二级域名泛解析

标签:

原文地址:http://www.cnblogs.com/zhaozi/p/4355933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!