寂寞部屋
- 关注互联网,关注生活
关注互联网,关注生活
2019年五月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  
  • 日志总数:553 篇
  • 浏览总量:2,435,551 次
  • 运行天数:619 天
  • 建站时间:2017-9-14
  • 最后更新:2019-4-2

ASP.NET中实现二级或多级域名

刚在找一些B2B的相关资料,忽然想到二级域名,所以也顺带看了一下,用urlrewrite也可以实现,蛮感兴趣的。这里感谢电子商务研发与运营。以下 部分内容均转载自利用UrlRewriter 实现二级域名。收藏起来以备以后用到可以查阅。

从前面寂寞部屋介绍过的urlrewrite相关文章可以看出url重写可以实现对域名后面的那部分进行重写,那么可不可以对前面那部分进行重写而实现二级域名呢?在本文中你将得到一个肯定的答案。具体的方法如下:首先我们得修改UrlRewriter,怎么修改请参见寂寞部屋介绍过的UrlReWriter 使用经验小结

1.BaseModuleRewriter.cs 
改为

C#代码
  1. protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)    
  2. {    
  3.    HttpApplication app = (HttpApplication) sender;    
  4.    Rewrite(app.Request.Path, app);    
  5. }   

 

C#代码
  1. protected virtual void BaseModuleRewriter_AuthorizeRequest{    
  2.     HttpApplication app = (HttpApplication) sender;    
  3.     Rewrite(app.Request.Url.AbsoluteUri, app);    
  4. }  

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

2.ModuleRewriter.cs 

C#代码
  1. for(int i = 0; i < rules.Count; i++)    
  2. {    
  3.    // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)    
  4.    string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";    
  5.     
  6.    // Create a regex (note that IgnoreCase is set)    
  7.    Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);    
  8.     
  9.    // See if a match is found    
  10.    if (re.IsMatch(requestedPath))    
  11.    {    
  12.       // match found – do any replacement needed    
  13.       string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));    
  14.     
  15.      // log rewriting information to the Trace object    
  16.      app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);    
  17.     
  18.      // Rewrite the URL    
  19.      RewriterUtils.RewriteUrl(app.Context, sendToUrl);    
  20.      break;        // exit the for loop    
  21.   }    
  22. }   

改为 

C#代码
  1. for(int i = 0; i < rules.Count; i++)    
  2. {    
  3.    // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)    
  4.    string lookFor = "^" + rules[i].LookFor + "$";    
  5.     
  6.    // Create a regex (note that IgnoreCase is set)    
  7.    Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);    
  8.     
  9.    // See if a match is found    
  10.    if (re.IsMatch(requestedPath))    
  11.    {    
  12.       // match found – do any replacement needed    
  13.       string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));    
  14.     
  15.       // log rewriting information to the Trace object    
  16.       app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);    
  17.     
  18.       // Rewrite the URL    
  19.       RewriterUtils.RewriteUrl(app.Context, sendToUrl);    
  20.       break;        // exit the for loop    
  21.    }    
  22. }   

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

改成了

C#代码
  1. string lookFor = "^" + rules[i].LookFor + "$";   

完成这2处改动之后重新编译项目,将生成的dll复制到bin目录下。

修改完了这后,我们再把此 UrlRewriter.dll COPY 到我们项目的Bin目录下。这样就结了么?没有。
首先请确定你的项目之前有按我上篇文章中写到的那样做过UrlRewriter的配置,否则请先回过头来看看那篇文章。

如果你的项目已配置过,那么,我们还要为此做以下几件事情:

1。请确定你的域名是支持泛解析的。然后你的网站为默认网站,否则将不能实现(至少我现在还没有找到好办法)
2。在IIS配置:在IIS你的站点属性主目录配置映谢 在通配符应用程序配置处插入一个新的映谢。把可执行文件设为和上面ASPX页面同样的配置即可(注意不要勾选 “确定文件是否存在”)。(用处就是使所有请求通过 asp.net 的ISAPI来处理,只有这样才能对所有地址进行重写嘛。)
3。查看下你的网站主机头,里面的第一个主机头值必须为空,否则会出现错误的请求。后面就随你加了,看你想绑定多少域名了。

4。最后改写你的 web.config 文件。

把上一篇文中说到的

XML/HTML代码
  1. <httpHandlers>  
  2.     <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  
  3.     <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  
  4.  </httpHandlers>  

改为:

XML/HTML代码
  1. <httpModules>  
  2.    <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />  
  3.   </httpModules>  

(就是改用HTTP 模块来执行重写,而不用HTTP 程序,否则无法重写地址前面。)
然后就来修改我们的重写正则了:

XML/HTML代码
  1. <RewriterRule>  
  2.    <LookFor>http://(.[0-9]*).abc.com/</LookFor>  
  3.    <SendTo>~/Search/Search_Sell.aspx?id=$1</SendTo>  
  4. </RewriterRule>  

好了,现在你输入 http://1.abc.com/ 就能搜索出相应分类了。但是聪明的你马上就发现。晕死,首页进不去了。呵呵。当然喽。你还得为首页加入重写正则。

XML/HTML代码
  1. <RewriterRule>  
  2.    <LookFor>http://www.abc.com/</LookFor>  
  3.    <SendTo>~/index.htm</SendTo>  
  4. </RewriterRule>  

大功告成。感觉爽死了吧。呵呵。莫急,如果你二级域名指向的目录下面的页面都用的相对地址连接的图片和其它页面的话,呵呵,你有得忙了,你要全部改成如下方式:
<a href=http://www.abc.com/cxlm/league.html target="_blank">****</a>

以上就是用UrlRewriter实现二级域名的方法了。

原文地址:http://blyct.cnblogs.com/articles/268879.html

本站原创文章,请勿复制转载
版权声明:除特别注明外,本站所有文章均为原创,未经许可请勿复制、转载
2008-04-07
3,724 views
暂无评论

发表评论

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。