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; } } |
浙公网安备 33010602011771号