本人所了解有两种方案,可能还有其的方式,希望大家多多讨论!  基本思路:  1. 域名支持泛解析,即是指:把A记录 *.域名.com 解析到服务器IP,服务器IIS中做绑定,绑定时主机头为空;  2. 为了实现完全的二级域,建两个站点,一个为主站用,一个为用户用,两个站点目录都指到一个同一网站目录  3. 在Web程序中或取URL来源中的二级域名主机头,比如:abc.域名.com 中的 abc;  4. 用获取来的二级域名名称,存入Session,方便取用  5. 用获取来的二级域名名称,用URL重写地址  实现方法:  域名A记录解析不用说了吧 ^_^,就是做一个*.域名.com的A记录解析到你服务器IP 

方法一:二级域名URL转向  a. 建立站点,在IIS中绑定域名(win2003 - IIS6)  打开IIS,右击站点,然后属性,点击网站项IP地址的高级按钮,然后点编辑或添加来新增绑定,主机头值为空.

下面来获取URL地址进行分析,下面是过程代码,用来获取及判断主机头,代码放在默认文档的首文件Index.aspx.cs中

代码:  /// <summary>  ///取得二级域主机头值,并实行转向  /// </summary>  public void CheckDomain()  {

HostName = HttpContext.Current.Request.Url.Host.ToString(); //获取URL主机地址  UserHost = HostName.Split(new Char[] { '.' }); //数组,以“.”分隔

,否则就跳传到其它页  if (UserHost.Length > 3)  {  HttpContext.Current.Response.Redirect("http://www.域名.com/Error.aspx"); //跳转到出错页面  return;  }

UserDomainName = UserHost[0].ToString(); //取得数组最前面一组值,及二级域名主机头

//进行特定判断,及是不要用到做为二级域名的主机头  if (UserDomainName.ToLower() == "www"    UserDomainName.ToLower() == "域名"    UserDomainName == null    UserDomainName.ToString()=="")

{  //你的动作  }  else {  HttpContext.Current.Response.Redirect("/User/"); //跳转到用户目录,即是二级域名所要去到的目录,当然你也可以跳传至*.aspx?UserID=xxx这样的链接  return;  }

}

到这里已经可以实现abc.域名.com跳转到指定的页面或链接了,但并不是真正的二级域名,只是URL转向而已。

方法二:真正的二级域名  a . 建立站点  此时我们需要建立两个站点,一个主站点、一个二级域站点,二个站点的文件目录为同一目录,其目录中有Default.aspx及Index.aspx两个文件。建立方法如下:  a). 主站点建立方法参照方法一中的站点建立,不过,主机头非空,需设为www.域名.com 与 域名.com ,当然,你也可以设置其它不想用来做二级域的主机头。站点默认访问文档为:Default.aspx。

b). 二级域站点建立方法与方法一中的站点建立一样,其默认访问文档为:Index.aspx。

b.现在我们要用到之前建立的二级域站点,我们将用户的数据放在根目录下的User目录中。  下面是/User目录中默认文档(Index.aspx.cs)的过程代码,主要用途是将二级域名主机头存入Session,方便调用,也是二级域(用户区)的首页文件

代码:  /// <summary>  ///取得二级域主机头值,存入Session["UserDomainName"]中  /// </summary>  public void UserDomainNameSession()  {  HostName = HttpContext.Current.Request.Url.Host.ToString(); //获取URL主机地址  UserHost = HostName.Split(new Char[] { '.' }); //数组,以“.”分隔

,否则就跳传到其它页  if (UserHost.Length > 3)  {  HttpContext.Current.Response.Redirect("http://www.域名.com//Error.aspx"); //跳转到出错页面  return;  }

UserDomainName = UserHost[0].ToString(); //取得数组最前面一组值,及二级域名主机头

//进行特定判断,及是不要用到做为二级域名的主机头  if (UserDomainName.ToLower() == "www"    UserDomainName.ToLower() == "域名"    UserDomainName == null    UserDomainName.ToString()=="")  {  //你的动作  }  else  {  HttpContext.Current.Session["UserDomainName"] = UserDomainName; //将二级域名主机头存入Session  }  }

//你对Session["UserDomainName"]的处理,比如把这个Session["UserDomainName"]的值是“abc”,那么你可以index.aspx?UserName=abc,如果不想使用Session,你可以在需要用到二级域主机头时,再来通过URL地址获取。

c. URL重写  我用的是微软的URLRewriter,使用方法参见:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.......g.mspx?mfr=true  web.config 中的重写方法是:

代码: [ 复制到剪贴板 ]  <RewriterRule>  <LookFor>~/Index.aspx</LookFor>  <SendTo>~/User/Index.aspx</SendTo>  </RewriterRule>

方法三:二级域名的访问方案实现原理代码如下

string str = System.Web.HttpContext.Current.Request.Url.Host.ToString();

string aburl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.ToString();

string strr = System.Web.HttpContext.Current.Request.QueryString.ToString();

string strurl = System.Web.HttpContext.Current.Request.Url.PathAndQuery.ToString();

string[] strlist = str.Split(new char[] { '.' });

string tb = strlist[0].ToString();

if (strlist.Length >= 3)

{

if (tb.ToLower() == "www" )

{

if (strr.ToLower().Contains("sjid"))

{

string[] strl = System.Text.RegularExpressions.Regex.Split(strr, "&", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

int sid = Convert.ToInt32(System.Text.RegularExpressions.Regex.Split(strl[0], "=", System.Text.RegularExpressions.RegexOptions.IgnoreCase)[1]);

if (new ConfigDB().Getissdo() == "1")

{

if (tb.ToLower() == "192" || tb.ToLower() == "127")

{

Response.Redirect("http://" + str + "/UserWeb/" + sy.Getmb(sid) + strurl);

}

else

{

Response.Redirect("http://" + str.Replace("www", sy.GetSjuserByID(sid)).Replace("cp1", sy.GetSjuserByID(sid)) + strurl);

}

}

else

{

if (tb.ToLower() == "192" || tb.ToLower() == "127")

{

Response.Redirect("http://" + str + "/UserWeb/" + sy.Getmb(sid) + strurl);

}

else

{

Response.Redirect("" + weburl + "/UserWeb/" + sy.Getmb(sid) + strurl);

}

}

}

}

else

{

if (!sy.SupplyMemberNameExistt(strlist[0].ToString()))

{

System.Web.HttpContext.Current.Response.Write(getym("" + weburl + "/error.aspx"));

Response.End();

return;

}

else

{

SqlDataReader sdr = sy.GetAdminDetailsByname(strlist[0].ToString());

string mb = string.Empty;

string cid = string.Empty;

while (sdr.Read())

{

mb = sdr["mb"].ToString();

cid = sdr["id"].ToString();

}

sdr.Close();

if (!strurl.ToLower().Contains("?"))

{

if (strurl.ToLower().Contains("html"))

{

if (strurl.ToLower().Contains("default"))

{

Response.Redirect(weburl);

Response.End();

return;

}

else

{

System.Web.HttpContext.Current.Response.Write(getym("" + weburl + "/" + strurl + ""));

Response.End();

return;

}

}

else

{

System.Web.HttpContext.Current.Response.Write(getym("" + weburl + "/UserWeb/" + mb + "/index.aspx?sjid=" + cid + ""));

Response.End();

return;

}

}

else

{

System.Web.HttpContext.Current.Response.Write(getym("" + weburl + "/UserWeb/" + mb + "/" + strurl + ""));

Response.End();

return;

}

}

}

}

ASP.NET实现二级域名(多用户,多商店)的更多相关文章

  1. asp.net 配置二级域名的共享session,并实现sso单点登录

    公司最近做了一个新网站.原先网站的网址是www.xxxx.com.新做的网站要部署到info.xxxx.com.这两个网站要实现单点登录.而新老网站本身机构的原因,对于登录状态的判断,说白了就是对于s ...

  2. .net用url重写URLReWriter实现任意二级域名

    .net用url重写URLReWriter实现任意二级域名 这两天需要用到URLReWriter来搞那个猪头的Blog,网上看到篇好文,收藏 摘要:解释了url重写的相关知识.用asp.net实现二级 ...

  3. ASP.NET二级域名站点共享Session状态

    我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...

  4. asp.net基于StateServer的二级域名共享session

    备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题.必有回复. 最近为实现的二级域名共享session纠结好久.网上的很多实现的方法试了都不行,查了很久才 ...

  5. asp.net core mvc中如何把二级域名绑定到特定的控制器上

    由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...

  6. ASP.NET MVC3.0或4.0设置二级域名的方法

    之前我就想做二级域名指向同一个IP同一个程序无非是在路由匹配规则上做文章也就是对Url的重写的一种思路.我用了半天时间上网查阅了相关资料并做了Demo测试是完全 以的,在这分享给大家... 假如网站主 ...

  7. asp.net 二级域名表单认证情况下共享Cookie

    二级域名之间共享Cookie,很重要的一点就是配置,如下: domain设置为.ahdqxx.com,如果你的域名是www.ahdqxx.com,mall.ahdqxx.com,那么请设置你的doma ...

  8. asp.net MVC把Areas区域绑定成二级域名

    先分析需求 在MVC项目中,我们如果有两个Areas.比如Test和DEMO.我们的访问地址应该是 http://localhost:8098/test http://localhost:8098/d ...

  9. Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

    最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent ...

随机推荐

  1. 关于memory 和 cache

    这篇文章介绍了cache的相关知识,包括全相关.组相关.缓存与置换策略.WriteThrough和WriteBack策略.cache体系.CPUID和缓存一致性.介绍了两种缓存一致性的协议:snoop ...

  2. HBase学习笔记之HFile格式

    主要看Roger的文档,这里作为文档的补充 HFile的格式-HFile的基本结构 Trailer通过指针找到Meta index.Data index.File info. Meta index保存 ...

  3. ♫【模式】自定义函数(self-defining function)

    <JavaScript模式> /** * 如果创建了一个新函数并且将其分配给保存了另外函数的同一个变量,那么就以一个新函数覆盖旧函数. * 在某种程度上,回收旧函数指针以指向一个新函数.而 ...

  4. 【转】Android应用程序完全退出

    原文网址:http://www.yoyong.com/archives/199 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://s ...

  5. rspec学习01

    1.安装rspec 2.基本构造 rspec用关键字describe和it,所以我们可以象正常会话一样去表达一个想法. describe方法创建了一个用例组,在describe所在的代码块里,你可以用 ...

  6. 项目升级,为了热更新使用lua。

    现在发行商的要求越来越变态,必须要求程序热更新,以应对上线后的bug及时调整,我们目标锁定在 ulua, slua,(也对L#感兴趣过),一开始对 ulua 很困惑,unity 的 assetstor ...

  7. 如何优雅的输出PHP调试信息

    经常因为出现紧急bug而被老板骂的同事,为了更快的修复而直接利用线上的错误环境现场debug,并直接在页面上echo和dump.结果被老板发现了,又是一通臭骂.那么有没有什么办法更优雅的输出PHP调试 ...

  8. 公有云开启全面竞争时代——青云QingCloud

    网界网本期[封面报道]公有云开启全面竞争时代 [CNW.com.cn 专稿] 险滩急流之后,公有云[注]服务市场的开拓者们终于看到了一片丰饶之海. 2013年,中国云计算[注]产业起步的第五年,公有云 ...

  9. 计算1到n整数中,字符ch出现的次数

    个位ch个数 + 十位ch个数 * 10 + 百位ch个数 * 100:同时如果某一位刚好等于ch,还需要减去多算的一部分值. #include <stdio.h> //整数1到n,字符c ...

  10. java 判断是不是检查性异常

    /** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...