技术摘录

只是一些项目相关技术的摘录

.net 二级域名绑定子目录如何实现

      abc.xinbeixi.cn ====>  www.xinebxi.cn/abc/
      abb.xinbeixi.cn  ====>  www.xinebxi.cn/abb/

要实现这个功能,首先要做域名泛解析,去域名管理里面的域名解析中添加一个:*.worldbao.com 指向服务器ip。

第二,重写URLRewrite里面的两个方法。

1.BaseModuleRewriter.cs  里面的BaseModuleRewriter_AuthorizeRequest方法



 

[c-sharp] view plaincopy
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)   
        {   
            HttpApplication app = (HttpApplication) sender;   
            Rewrite(app.Request.Path, app);   
        }   
[c-sharp] view plaincopy
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)   
        {   
            HttpApplication app = (HttpApplication) sender;   
            Rewrite(app.Request.Path, app);   
        }   
改为

[c-sharp] view plaincopy
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)   
        {   
            HttpApplication app = (HttpApplication) sender;   
            Rewrite(app.Request.Url.AbsoluteUri, app);   
        }   
[c-sharp] view plaincopy
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)   
        {   
            HttpApplication app = (HttpApplication) sender;   
            Rewrite(app.Request.Url.AbsoluteUri, app);   
        }   
 

2, ModuleRewriter.cs  里面的 Rewrite 方法



 

[c-sharp] view plaincopy
    protected override void Rewrite(string requestedPath, System.Web.HttpApplication app)  
    {  
        // log information to the Trace object.  
        app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter");  
  
        // get the configuration rules  
        RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules;  
  
        // iterate through each rule...  
        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  
            }  
        }  
  
        // Log information to the Trace object  
        app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter");  
    }  
}  
[c-sharp] view plaincopy
        protected override void Rewrite(string requestedPath,   
System.Web.HttpApplication app)  
        {  
            // log information to the Trace object.  
            app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter");  
  
            // get the configuration rules  
            RewriterRuleCollection rules =   
RewriterConfiguration.GetConfig().Rules;  
  
            // iterate through each rule...  
            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  
                }  
            }  
  
            // Log information to the Trace object  
            app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter");  
        }  
    }  
改为

[c-sharp] view plaincopy
    protected override void Rewrite(string requestedPath, System.Web.HttpApplication app)  
    {  
        // log information to the Trace object.  
        app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter");  
  
        // get the configuration rules  
        RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules;  
  
        // iterate through each rule...  
        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  
            }  
        }  
  
        // Log information to the Trace object  
        app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter");  
    }  
}  
[c-sharp] view plaincopy
        protected override void Rewrite(string requestedPath,   
System.Web.HttpApplication app)  
        {  
            // log information to the Trace object.  
            app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter");  
  
            // get the configuration rules  
            RewriterRuleCollection rules =   
RewriterConfiguration.GetConfig().Rules;  
  
            // iterate through each rule...  
            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  
                }  
            }  
  
            // Log information to the Trace object  
            app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter");  
        }  
    }  
就是将

string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$"; 

改成了 

string lookFor = "^" + rules[i].LookFor + "$";

 

完成这过程之后将整个项目重新编译一下。

这些都做完之后,

在webconfig配置里面的
 <configSections>里面 添加:

[xhtml] view plaincopy
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>  
[xhtml] view plaincopy
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>  
在</configSections>下面添加

[xhtml] view plaincopy
<RewriterConfig>  
 <!-- 处理默认首页失败-->  
 <Rules>  
  <RewriterRule>  
   <LookFor>http://www/.worldbao/.com/</LookFor>  
   <SendTo>~/default.aspx</SendTo>  
  </RewriterRule>  
 </Rules>  
 <!-- 处理默认首页失败-->  
  
 <!--二级域名正则-->  
 <Rules>  
  <RewriterRule>  
   <LookFor>http://([a-zA-Z|0-9]+)/.worldbao/.com/</LookFor>  
   <SendTo>/user/user.aspx?us=$1</SendTo>  
  </RewriterRule>  
 </Rules>  
 <!--二级域名正则-->  
</RewriterConfig>  
[xhtml] view plaincopy
<RewriterConfig>  
 <!-- 处理默认首页失败-->  
 <Rules>  
  <RewriterRule>  
   <LookFor>http://www/.worldbao/.com/</LookFor>  
   <SendTo>~/default.aspx</SendTo>  
  </RewriterRule>  
 </Rules>  
 <!-- 处理默认首页失败-->  
  
 <!--二级域名正则-->  
 <Rules>  
  <RewriterRule>  
   <LookFor>http://([a-zA-Z|0-9]+)/.worldbao/.com/</LookFor>  
   <SendTo>/user/user.aspx?us=$1</SendTo>  
  </RewriterRule>  
 </Rules>  
 <!--二级域名正则-->  
</RewriterConfig>  
 在httpModules里面添加

[xhtml] view plaincopy
<httpModules>  
    <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/>  
</httpModules>  
[xhtml] view plaincopy
<httpModules>  
    <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/>  
</httpModules>  

最后一步
IIS里面添加  ASPNET_ISAPI的通配符应用程序映射
操作方法:IIS站点属性 ->主目录 ->  配置
点击插入按键
选择或输入C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll
取消"确认文件是否存在"前的钩. 确定
ok,现在输入http://suyiming.worldbao.com/就可以看到效果了

评论

© 技术摘录 | Powered by LOFTER