前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二级域名用asp.net 2.0的实现方案

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

作者头像
Java架构师必看
发布2021-03-22 10:55:22
2.6K0
发布2021-03-22 10:55:22
举报
文章被收录于专栏:Java架构师必看

本人所了解有两种方案,可能还有其的方式,希望大家多多讨论!

基本思路:

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中

代码语言:javascript
复制
代码:
         /// <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,方便调用,也是二级域(用户区)的首页文件

代码语言:javascript
复制
代码:
         /// <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-->

代码语言:javascript
复制
代码:
                         <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重写规则:

代码语言:javascript
复制
    <RewriterRule>
             <LookFor>~/test/.aspx</LookFor>
             <SendTo>~/User/test.aspx</SendTo>
    </RewriterRule>

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

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档