|
|
51CTO旗下网站
|
|
移动端

ASP.NET下用URLRewriter重写二级域名

今天我们将谈到的是ASP.NET下用URLRewriter重写二级域名的问题,还涉及到相关扩展库的事项,希望对大家有所帮助。

作者:张浩华来源:博客园|2011-03-21 09:26

这里要求对域名进行重写,实现http://1234.abc.com/ 到 ~/Defa.aspx?id=1234的重写。

***:域名

首先域名要支持泛解悉,就是域名解悉的主机名为星号*,例:*.abc.com。如下图


这样能保证你在浏览器地址栏输入任何前缀,DNS都会把它们指向到你指定的IP地址上。

第二:IIS设置(Win2003 + IIS 6为例)

(1)网站必须为Web服务器的默认站点,即端口号为80,主机头为空的站点。如下图所示。


该站点接收所有对该服务器的HTTP请求(其它设置为主机头的站点除外)。所以任何二级域名访问该服务器都会由该站点进行处理。

(2)另外要在站点的“通配符应用程序映射”列表中添加ASP.NET的Web请求处理程序aspnet_isapi.dll。如下图所示。


在这里的设置,是让该站点接到的所有请求都交给aspnet_isapi.dll处理。

第三:修改Microsoft的URLRewriter。

运行开源项目URLRewriter。这里需要修改两个地方:

(1)BaseModuleRewriter.cs类

  1.  protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)   
  2.  {   
  3.  HttpApplication app = (HttpApplication) sender;   
  4.  //Rewrite(app.Request.Path, app);   
  5. Rewrite(app.Request.Url.AbsoluteUri, app); // ## ## ## 这里修改了   
  6. }  

这里将app.Request.Path 替换成了 app.Request.Url.AbsoluteUri

(2)ModuleRewriter.cs类

  1.  protected override void Rewrite(string requestedPath, System.Web.HttpApplication app)   
  2.  {   
  3.  // log information to the Trace object.   
  4.  app.Context.Trace.Write("ModuleRewriter""Entering ModuleRewriter");   
  5.  // get the configuration rules   
  6. RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules;   
  7. // iterate through each rule...   
  8. for (int i = 0; i < rules.Count; i++)   
  9.  {   
  10.  // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)   
  11.  //string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";   
  12.  string lookFor = "^" + rules[i].LookFor + "$"// ## ## ## 这里修改了   
  13. // Create a regex (note that IgnoreCase is set...)   
  14. Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);   
  15. // See if a match is found   
  16. if (re.IsMatch(requestedPath))   
  17.  {   
  18. // match found - do any replacement needed   
  19. string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));   
  20.  // log rewriting information to the Trace object   
  21.  app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);   
  22. // Rewrite the URL   
  23.  RewriterUtils.RewriteUrl(app.Context, sendToUrl);   
  24. break// exit the for loop   
  25.  }   
  26.  }   
  27.  // Log information to the Trace object   
  28.  app.Context.Trace.Write("ModuleRewriter""Exiting ModuleRewriter");   
  29. }  

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

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

这两个地方修改完以后,生成项目。将项止目bin/Debug目录下的URLRewriter.dll文件Copy到我们要重写URL的项目中。

第四:配置项目

(1)在web.config文件的configSections节点下添加如下一行代码

  1. <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/> 

这里配置一个重写配置的类

(2)修改httpModules节点,在里面添加一行配置代码

  1. <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> 

(3)在主节点configuration节点下添加路由规则,代码如下:

  1.  <!-- URL重写 将捕获页面转发到实际地址  --> 
  2.     <RewriterConfig>   
  3.     <Rules>   
  4.            <RewriterRule>   
  5. <LookFor>http://(\w+).abc.com/</LookFor> 
  6.  <SendTo>~/Defa.aspx?id=$1</SendTo> 
  7.            </RewriterRule> 
  8.   </Rules> 
  9.   </RewriterConfig> 
  10.   <!-- URL重写 将捕获页面转发到实际地址 ( 结束 )  --> 

代码里一个RewriterRule节点就是一个规则,这时只有一个,即把域名中的主机头部分做为Defa.aspx页面的id参数的值发送给Defa.aspx页面。

注意:这里LookFor节点里的http://(\w+).abc.com/不能少了***的反斜框

OK,一切完工

发布,上传到服务器,测试一下,如图

本次测试需要一个类库:URLRewriter.dll (测试版本 1.0.1495.18710)

官网下载地址:http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

【编辑推荐】

  1. 详解ASP.NET MVC 3 beta新特性
  2. ASP.NET MVC 3让依赖注入实现得更简单
  3. 详解ASP.NET MVC 3 beta新特性
  4. ASP.NET MVC 3新特性与NuPack功能详解
  5. .NET开发人员应该关注的七个开源项目
【责任编辑:彭凡 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

287人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

程序员教程(第2版)

本书按照人事部、信息产业部全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲编写,是对2004版的修订版,内容包括计算机系统、...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客