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类
- 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类
- 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) + "$";
- 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 + "$";
这两个地方修改完以后,生成项目。将项止目bin/Debug目录下的URLRewriter.dll文件Copy到我们要重写URL的项目中。
第四:配置项目
(1)在web.config文件的configSections节点下添加如下一行代码
- <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
这里配置一个重写配置的类
(2)修改httpModules节点,在里面添加一行配置代码
- <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
(3)在主节点configuration节点下添加路由规则,代码如下:
- <!-- URL重写 将捕获页面转发到实际地址 -->
- <RewriterConfig>
- <Rules>
- <RewriterRule>
- <LookFor>http://(\w+).abc.com/</LookFor>
- <SendTo>~/Defa.aspx?id=$1</SendTo>
- </RewriterRule>
- </Rules>
- </RewriterConfig>
- <!-- 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
【编辑推荐】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!开发 | 再见了,公司的“烂系统”使用Python自动化Microsoft Excel和WordJava对象为啥要实现Serializable接口?图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)在 Vue.js 中使用嵌套路由终于有人把Elasticsearch原理讲透了!
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!坐在马桶上看算法:快速排序图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)6种微服务RPC框架,你知道几个?开发 | 再见了,公司的“烂系统”Java对象为啥要实现Serializable接口?架构师的选择,Pulsar还是Kafka?
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!坐在马桶上看算法:快速排序花了一个星期,我终于把RPC框架整明白了!6种微服务RPC框架,你知道几个?图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)Java对象为啥要实现Serializable接口?五大自动化测试的Python框架PHP数组转字符串与PHP字符串转数组的相关方法解析
订阅专栏+更多
-
16招轻松掌握PPT技巧
GET职场加薪技能共16章 | 晒书包287人订阅学习
-
20个局域网建设改造案例
网络搭建技巧共20章 | 捷哥CCIE645人订阅学习
-
WOT2019全球人工智能技术峰会
通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。共50章 | WOT峰会0人订阅学习
视频课程+更多
-
2019软考信息系统项目管理师-考前冲刺重难点
讲师:小任老师135586人学习过
-
2019年软考网络工程师--下午案例分析历年真题
讲师:小任老师221404人学习过
-
Excel企业实战与解决方案开发教程1
讲师:王子宁204420人学习过
- 精选博文
- 论坛热帖
- 下载排行
- 企业级Docker镜像仓库Harbor部署与使在最新版proxmox VE 6 部署oracle 19Java底层:GC相关为什么大型互联网都需要网关服务?Spring Boot 自动配置(auto-configu
- 《服务器硬件工程师从入门到精通》-《服务器硬件工程师从入门到精通》-一段代码画出小猪佩奇社会人 Python【软考福利】金牌讲师@徐朋 视频课程源码:调用摄像头并进行人脸识别截图
- 李宏毅深度学习视频23种设计模式视频Telerik_UI_for_Xamarin_2018_1_117_Telerik_UI_for_WPF_2018_1_116_Dev.Telerik_UI_For_WinForms_2018_1_116
读 书 +更多
程序员教程(第2版)
本书按照人事部、信息产业部全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲编写,是对2004版的修订版,内容包括计算机系统、...
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO播客