c#实现动态创建二级域名,比如当用户注册成功后就会给他一个网址http://name.site.com,博客网站上都有这种功能.

第一步:把域名设置成泛解析.  
  就是把*.域名   解析到你的主机,是否支持泛解析,请查看你的域名商说明.
第二步:IIS设成的时候不要绑定域名.注意一台服务器里只能有一个站点不绑定域名
就是*.域名的默认访问页.
第三步:默认页里加入以下代码:关键部分如下:
string   sURL=context.Request.ServerVariables[ "HTTP_HOST "].ToLower();
  sURL就是获取的域名部分   .
    xxx.域名
    对应的xxx就是用户名.然后查库里的记录,如xxx对应的是www.csd.net那就就把
它转向到www.csdn.net   或者写一个框架页隐藏直实域名

   

    第三步也可以写成HttpHandler或者HttpModule模块来处理
  HttpHandler模块:
public   class   DnsHttpHandler:   IHttpHandler  
{
public   void   ProcessRequest   (HttpContext   context)  
{
                        string   sUSER;
                        UserDns   user;
string   userDomain=string.Empty;
string   sURL=context.Request.ServerVariables[ "HTTP_HOST "].ToLower();
if(sURL.IndexOf( "@ ")==-1&&sURL.IndexOf( ". ")==-1)
{
//判段域名,转向默认网址
context.Response.Redirect(DnsConfiguration.GetConfig().DefaultURL,true);
}

#region   myhome设置
if(sURL== "保留域名 ")
{
context.Response.Redirect(DnsConfiguration.GetConfig().DefaultURL,true);
}
#endregion
#region   判段并获取用户名
sUSER=Utility.DomainToUser(sURL);
userDomain=Utility.GetFirstDomain(sURL);
//context.Response.Write(userDomain);
//context.Response.End();
user     =Users.GetUserDns(sUSER,userDomain);

if(user==null)
{
context.Response.Redirect(DnsConfiguration.GetConfig().DefaultURL,true);
}
                     
                  context.Response.Write(   " <meta   http-equiv=refresh   content=\ "0;url= "+user.RedirectURL.Trim()+ "\ "> ");  


#endregion




}

public   bool   IsReusable  
{
get  
{
return   false;
}
}
}

  提取用户名模块:
public   class   Utility
{
public   static   string   DomainToUser(string   domain)
{  
string   username=string.Empty;
string[]   first_name;
#region   判段并获取用户名

if(domain.IndexOf( "@ ")==-1&&domain.IndexOf( ". ")==-1)
{
  return   username;
}
if(domain.IndexOf( ". ")!=-1)
{
first_name=domain.Split( '. ');
if(first_name[0]== "www ")
{
username=first_name[1];
}
else
{
username=first_name[0];
}
}
if(domain.IndexOf( "@ ")!=-1)
{
first_name=domain.Split( '@ ');
if(first_name[0]== "www ")
{
username=first_name[1];
}
else
{
username=first_name[0];
}
}
#endregion

  return   username;
}

public   static   string   GetFirstDomain(string   domain)
{
  string[]   first_name;
domain=domain.Replace( '@ ', '. ');
string   temp=string.Empty;
if(domain.StartsWith( "www. "))
{
domain=domain.Replace( "www. ", " ");
}
if(domain.IndexOf( '. ')!=-1)
{
first_name=domain.Split( '. ');
}else
return   string.Empty;
if(first_name.Length==2)
{
//sb.Append( "{0}.{1} ",first_name[0])
return   String.Format( "{0}.{1} ",first_name[0],first_name[1]);
}
for(int   i=1;   i <first_name.Length;i++)
{
temp   +=   first_name[i]   +   ". ";
}
                        temp=temp.Remove(temp.Length-1,1);
                return   temp;
                   
     
}
}
posted on 2011-04-14 16:20  西湖浪子  阅读(603)  评论(0)    收藏  举报