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

大家应该知道,微软的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

的结果了 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值