Community Server配置对网址中的www信息处理功能分析 [转]

社区服务器WWW配置
本文介绍CommunityServer中关于www处理策略的配置方法及其实现原理。包括配置文件communityserver.config的具体设置选项及其对网站URL的影响,并详细解析了CSHttpModule类中相关代码。

国外有种习惯,比如你访问 www.****.com 网站,他会自动跳转到 ****.com 。
在 Community Server 中就提供了这种功能,而且这种功能是可选的(可以强制去掉、强制不去掉、不理睬它)。
默认情况下 Community Server 就强制去掉 www. 。

先说如何修改是这个功能

打开Web项目,其中的 communityserver.config 配置文件。
在这里我们可以看到下面的配置节:

<CommunityServer>
<Core ......  wwwStatus = "Remove" .... />
......
</CommunityServer>

这里可以有三个设置:
Require   强制加 www.
Remove  强制不加 www.  这个是默认设置 
Ignore     忽略这个问题

只要修改成对应的设置,就自动切换了这个设置。

下面我们看它是如何实现这个功能的:

Community Server 2.0 中使用了 HttpModules 来处理这个功能:web.config中,我们可以看到 httpModules 的配置如下:

    <httpModules>
      <add name="CommunityServer" type="CommunityServer.CSHttpModule, CommunityServer.Components" />
    </httpModules>
..........

CSHttpModule 类在 CommunityServer.Components 项目的HttpModule 目录下的 CSHttpModule.cs 文件中.这个类继承了 System.Web.IHttpModule 接口

System.Web.IHttpModule 接口要求实现 初始化模块方法,即 Init 方法。
在这个类的初始化方法中,我们可以看到,我们订约了BeginRequest 事件。

public void Init(HttpApplication application)
{
 application.BeginRequest += new EventHandler(this.Application_BeginRequest);
 ......
}

在这个事件的处理函数 Application_BeginRequest 中,如下,我们可以看到,先从Community Server 配置文件中读取出配置(既从communityserver.config 配置文件读取配置)
然后根据这个配置检查我该如何处理(CheckWWWStatus 函数实现)。

private void Application_BeginRequest(Object source, EventArgs e)
{
 .......
 HttpContext context = application.Context;
 .......
 CSConfiguration config = CSConfiguration.GetConfig();
 .......
 CheckWWWStatus(config,context);
 .......
}

private void CheckWWWStatus(CSConfiguration config, HttpContext context)
{
 if(config.WWWStatus == WWWStatus.Ignore)
  return;
 const string withWWW = "http://www.";
 const string noWWW = "http://";
 string rawUrl = context.Request.Url.ToString().ToLower();
 bool isWWW = rawUrl.StartsWith(withWWW);
 if(config.WWWStatus == WWWStatus.Remove && isWWW)
 {
  context.Response.Redirect(rawUrl.Replace(withWWW, noWWW));
 }
 else if(config.WWWStatus == WWWStatus.Require && !isWWW)
 {
  context.Response.Redirect(rawUrl.Replace(noWWW, withWWW));
 }
}

代码分析到此结束,Community Server 2.0 就是通过上述代码实现定制不同的 www 处理策略的。

 

转载于:https://www.cnblogs.com/guodapeng/archive/2007/12/21/1009054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值