首页 > 编程 > .NET > 正文

网站二级域名用asp.net 2.0的实现方案

2024-07-10 13:05:53
字体:
来源:转载
供稿:网友

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

实现方法:
域名a记录解析不用说了吧 ',就是做一个*.xrss.cn的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[] { '.' });  //数组,以“.”分隔

            //判断二级域名地址是否符合abc.xrss.cn 这种格式,及数组userhost长度不大于3,否则就跳传到其它页
            if (userhost.length > 3)
            {
                httpcontext.current.response.redirect("http://www.xrss.cn/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.xrss.cn跳转到指定的页面或链接了,但并不是真正的二级域名,只是url转向而已。


方法二:真正的二级域名
a.        建立站点
此时我们需要建立两个站点,一个主站点、一个二级域站点,二个站点的文件目录为同一目录,其目录中有default.aspx及index.aspx两个文件。建立方法如下:
a). 主站点建立方法参照方法一中的站点建立,不过,主机头非空,需设为www.xrss.cn  与 xrss.cn ,当然,你也可以设置其它不想用来做二级域的主机头。站点默认访问文档为: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[] { '.' });        //数组,以“.”分隔

                        //判断二级域名地址是否符合abc.xrss.cn 这种格式,及数组userhost长度不大于3,否则就跳传到其它页
            if (userhost.length > 3)
            {
                httpcontext.current.response.redirect("http://www.xrss.cn//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 中的重写方法是:
                        <!--user区主机头url重写,实现当abc.xrss.cn访问站点时,经二级域站点,默认首文件为index.aspx,将index.aspx地址重写到/user/index.aspx-->


代码: [ 复制到剪贴板 ]
                        <rewriterrule>
                                <lookfor>~/index/.aspx</lookfor>
                                <sendto>~/user/index.aspx</sendto>
                        </rewriterrule>


到这里已经实现二级域了,不管输入什么样的主机头(www.xrss.cn 与 xrss.cn除外,因为这两个域已经绑定到主站点中,优先访问到了主站点),就可以实现 abc.xrss.cn访问到这个用户目录了,而且浏览器地址栏,出现的也是abc.xrss.cn这样的域名地址,为了保证此二级域访问其它页面也保持二级域名的属性,也需同时做url重写,在其它页面如需用到二级域主机头(用户名),从session["userdomainname"] 中取得即可,比如,要在user目录中的文件 test.aspx ,显示二级域主机头名称,同时需保持浏览器地址栏地址为: abc.xrss.cn/test.aspx ,那么在web.config中添加url重写规则:


代码:                         <rewriterrule>
                                <lookfor>~/test/.aspx</lookfor>
                                <sendto>~/user/test.aspx</sendto>
                         </rewriterrule>

然后,test.aspx自身通过获取session["userdomainname"]的值或通过url或取,来显示二级域主机头名称。
当然,你也可以直接将二级域站点单独绑定到这个user用户目录,取得url中的主机头(用户名),但这样可能失去了与主站数据通讯的方便性。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表