zoukankan      html  css  js  c++  java
  • ASP.NET实现二级域名(多用户,多商店)

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

    代码: [ 复制到剪贴板  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;

     

                            }

                        }

                    }

                }

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/EricChan/p/3890022.html
Copyright © 2011-2022 走看看