一起谈.NET技术,ASP.NET下用URLRewriter重写二级域名

本文涉及的产品
.cn 域名,1个 12个月
简介:   这里要求对域名进行重写,实现http://1234.abc.com/ 到 ~/Defa.aspx?id=1234的重写。  第一:域名  首先域名要支持泛解悉,就是域名解悉的主机名为星号*,例:*.abc.com。

  这里要求对域名进行重写,实现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类

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

  这里将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)

目录
打赏
0
0
0
0
52
分享
相关文章
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问,即使IP地址变化,也能通过DDNS服务保持连接。适用于家庭网络远程访问设备及企业临时或移动设备管理,提供便捷性和灵活性。示例代码展示了如何使用Python实现基本的DDNS更新。尽管存在服务可靠性和安全性挑战,DDNS仍极大提升了网络资源的利用效率。
96 6
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
93 7
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
42 5
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
49 4
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
40 4
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
68 5
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
47 3
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
45 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等