一起谈.NET技术,ASP.NET下用URLRewriter重写二级域名
2011-09-01 23:58
465 查看
这里要求对域名进行重写,实现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类
这里将app.Request.Path 替换成了 app.Request.Url.AbsoluteUri
(2)ModuleRewriter.cs类
这里将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节点下添加如下一行代码
这里配置一个重写配置的类
(2)修改httpModules节点,在里面添加一行配置代码
(3)在主节点configuration节点下添加路由规则,代码如下:
代码里一个RewriterRule节点就是一个规则,这时只有一个,即把域名中的主机头部分做为Defa.aspx页面的id参数的值发送给Defa.aspx页面。
注意:这里LookFor节点里的http://(\w+).abc.com/不能少了最后的反斜框
OK,一切完工
发布,上传到服务器,测试一下,如图
本次测试需要一个类库:URLRewriter.dll (测试版本 1.0.1495.18710)
第一:域名
首先域名要支持泛解悉,就是域名解悉的主机名为星号*,例:*.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)
相关文章推荐
- ASP.NET“.NET研究”下用URLRewriter重写二级域名
- ASP.NET 使用URLRewriter重写二级域名
- 一起谈.NET技术,ASP.NET 4的Demo实践:URL路由改进支持
- 一起谈.NET技术,ASP.NET的地址重写(URLRewriter)实现原理及代码示例
- ASP.NET 使用URLRewriter重写二级域名
- ASP.NET 使用URLRewriter 重写二级域名
- 一起谈.NET技术,ASP.NET MVC:自定义 Route 以生成小写的 Url
- 一起谈.NET技术,VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇
- 一起谈.NET技术,ASP.NET4灵活显标记:数据Web控件改进
- 一起谈.NET技术,asp.net控件开发基础(17)
- 一起谈.NET技术,asp.net控件开发基础(6)
- URL重写,静态地址映射,asp.net URL重写,URLRewriter.dll下载,URLRewriter,URLRewriter下载,URL重写学习(终级篇)
- 一起谈.NET技术,ASP.NET Eval如何进行数据绑定
- URL重写,静态地址映射,asp.net URL重写,URLRewriter.dll下载,URLRewriter,URLRewriter下载,URL重写学习(终级篇)
- 一起谈.NET技术,在 Linux 操作系统中运行 ASP.NET 4 (下)
- 一起谈.NET技术,走向ASP.NET架构设计——第六章:服务层设计(中篇)
- 一起谈.NET技术,走向ASP.NET架构设计——第四章:业务层分层架构(后篇)
- 一起谈.NET技术,asp.net 缓存
- 一起谈.NET技术,提高ASP.NET应用程序性能的十大方法
- 一起谈.NET技术,ASP.NET MVC 2生成动态表单的一种最简单的思路