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

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

时间: 2024-10-26 12:39:45

一起谈.NET技术,ASP.NET下用URLRewriter重写二级域名的相关文章

ASP.NET“.NET研究”下用URLRewriter重写二级域名

这里要求对域名进行重写,实现http://1234.abc.com/ 到 ~/Defa.aspx?id=1234的重写. 第一:域名 首先域名要支持泛解悉,就是域上海企业网站制作名解悉的主机名为星号*,例:*.abc.com.如下图 这样能保证你在浏览器地址栏输入任何前缀,DNS都会把它们指向到你指定的IP地址上. 第二:IIS设置(Win2003 + IIS 6为例) (1)网站必须为Web服务器的默认站点,即端口号为80,主机头为空的站点.如下图所示. 该站点接收所有对该服务器的HTTP请求

asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页_实用技巧

摘要:解释了url重写的相关知识.用asp.net实现二级域名重写的方法.对重写的一些问题做了汇总解答.提供了几段示例代码. 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题.很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了?第一步:在浏览器键入了一个地址,比如http://lov

asp.net下URL网址重写成.html格式、RSS、OPML的知识总结_实用技巧

一.URL网址重写1.在MSDN中下载一个文件,将ActionlessForm.dll和URLRewriter.dll放到bin目录下.这是MSDN中关于URL重写的一篇文章里的地址.在 ASP.NET 中执行 URL 重写 2.将web.config文件中添加下面的代码 <!-- 自定义配置节 --> <configSections>    <section name="RewriterConfig" type="URLRewriter.Con

一起谈.NET技术,.Net下的分布式缓存(3)--如果我们没有缓存会怎么样

上回说到了Memcached的性能问题,的确,缓存不是万能的,但没有缓存是万万不能的?还真有这么干的. PlentyofFish就是这样做的, 它也是互联网上巨头中为数不多的采用WISC(Windows + IIS + Sql server + C#)架构的网站, MS不能老拿MySpace说事, 现在当然不会放过这个机会大肆宣传, 但是讽刺的是人家根本不用那些"看起来很美"的服务器控件,与其说是使用了.Net技术不如说是借用了这个平台而已. 他们的页面输出绝大多数都是使用构造字符串要

一起谈.NET技术,.Net下的分布式缓存--从Discuz!NT的缓存设计谈起

最近拜读了代振军同学写的关于Discuz!NT的缓存设计的一篇文章<Discuz!NT 缓存设计简析 [原创]>,颇有些想法,姑且写在这里让大家拍砖吧. 缓存真是个好东西,在大型的系统中可以有效地提升系统的速度,此乃废话就不多说了,在.Net 平台下面我把缓存从功用大致分为两类,数据对象缓存和页面输出缓存. 对于数据缓存来讲是由System.Web.Caching.Cache这个类来实现,可以从上下文对象Context.Cache 来获取这个对象的引用.而页面/控件输出缓存则是由.Net环境在

一起谈.NET技术,.Net下的分布式缓存(2)--实现分布式缓存同步的手段

前不久,俺写了篇文章谈到了.Net下面的分布式缓存的一些问题,并结合DNT里面实现模式发表了一些自己的看法,近来通过学习相关的东西又有了一些新的体会, 写在这里作为分布式缓存列系文章的第二部分. 其实对于性的扩展无非是Scale Up(向上扩展)或者是Scale Out(向外扩展), 微软对此的看法是一个App的缓存最好是以它自己为物理边界进行读写,而不要放到别处去,这样带的问题可能有对象的序列化传送,反序列化,网络连接开销,跨进程的开销,对于高性能的站点来说都是不能忽视的问题.出于对这些因素的

一起谈.NET技术,NET下RabbitMQ实践 [WCF发布篇]

在之前的两篇文章中,主要介绍了RabbitMQ环境配置,简单示例的编写.今天将会介绍如何使用WCF将RabbitMQ列队以服务的方式进行发布. 注:因为RabbitMQ的官方.net客户端中包括了WCF的SAMPLE代码演示,很适合初学者,所以我就偷了个懒,直接对照它的SAMPLE来说明了,算是借花献佛吧,呵呵.首先我们下载相应源码(基于.NET 3.0),本文主要对该源码包中的代码进行讲解,链接如下:    Binary, compiled for .NET 3.0 and newer (zi

一起谈.NET技术,NET下RabbitMQ实践 [配置篇]

     这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战.当然不排除加餐情况.      介绍:      rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器.      RabbitMQ的官方站:http://www.rabbitmq.com/          AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路

asp.net下使用AjaxPro实现二级联动代码

复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1