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类

  
 
 
 
  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); // ## ## ## 这里修改了 

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

这里将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节点下添加路由规则,代码如下:

  
 
 
 
  1.  
  2.      
  3.      
  4.             
  5. http://(\w+).abc.com/
  6.  ~/Defa.aspx?id=$1
  7.            
  8.   
  9.   
  10.   

代码里一个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

网页标题:ASP.NET下用URLRewriter重写二级域名
网址分享:http://www.mswzjz.cn/qtweb/news6/367706.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能