另类的二级域名实现方法
文前声明:小生对“二级域名”、“分站”这类概念不是很清楚,本文若是对各位多少有点用,就留个笑脸;若是不才,各位认为完全时垃圾,也敬请拍砖。如果,阁下有更好、更简便的方法,也可以提出来,以供大家(特别是我)学习学习......
这几天,外卖汇网站开始需要实施其他城市的扩展(目前就杭州站有,正在准备上海站的开通),可是遇到一个问题(不说大家也知道了),就是如何通过二级域名指向不同的城市站点。目前外卖汇的域名是waimaihui.com,希望将http://hz.waimaihui.com/指向杭州站,而将http://sh.waimaihui.com/指向上海站。这个自然可以通过配置DNS来简单的实现,但是考虑到后期其他城市的扩展,如果都是通过配置DNS来实现的话,未免可扩展性也太差了。所以,考虑通过程序实现。
考虑到,城市之间的数据基本没有交互的地方,故每个城市都采用一个独立的数据库(当然,这不是一个好的解决方法),这就使得其实不同城市之间只有数据库不同罢了,其他都是一样的,除了网页的标题这类的页面内容,而且这些也只是换个城市名称罢了。
所以,我就想到了一个另类的方法:通过判断用户请求的hostName来判断用户访问的是哪个城市的站点,不同的城市使用不同的数据库连接字符串,这些数据库连接字符串保持为web.config中的key值。
HostName = HttpContext.Current.Request.Url.Host.ToString(); //获取URL主机地址
UserHost = HostName.Split(new Char[] { '.' }); //数组,以“.”分隔
通过判断UserHost[0]的值,来决定用户访问的城市站点。比如说,用户请求的页面时http://hz.waimaihui.com/那么UserHost[0]="hz"
这里也遇到了另一个问题:何时设置这个字符串,用户的访问你是无法确定的,也许用户前一秒访问的时http://hz.waimaihui.com/,可是后一秒也许就是http://sh.waimaihui.com/,如何使得连接字符串做到正确的切换呢?
我选择引入Global.asax,这Application_BeginRequest事件中判断用户请求的页面,然后设置连接字符串为不同的key值,这个事件会在用户每次请求页面时被触发,这样就可以始终保持连接字符串时正确的了。