zoukankan      html  css  js  c++  java
  • [转]网站二级域名用asp.net 2.0的实现方案

     原文链接:http://blog.csdn.net/mengyao/archive/2007/01/25/1493537.aspx, 可参文章:http://www.knowsky.com/344470.html

    本人所了解有两种方案,可能还有其的方式,希望大家多多讨论!
    基本思路:
    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[] { '.' });  //数组,以“.”分隔

                //判断二级域名地址是否符合abc.域名.com 这种格式,及数组UserHost长度不大于3,否则就跳传到其它页
                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[] { '.' });        //数组,以“.”分隔

                            //判断二级域名地址是否符合abc.域名.com 这种格式,及数组UserHost长度不大于3,否则就跳传到其它页
                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 中的重写方法是:
                            <!--User区主机头URL重写,实现当abc.域名.com访问站点时,经二级域站点,默认首文件为Index.aspx,将Index.aspx地址重写到/User/Index.aspx-->


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


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


    代码:                         <RewriterRule>
                                    <LookFor>~/test\.aspx</LookFor>
                                    <SendTo>~/User/test.aspx</SendTo>
                             </RewriterRule>

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

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/scgw/p/847169.html
Copyright © 2011-2022 走看看