基本思路:
1. 域名支持泛解析,即是指:把A记录 *.domain.cn 解析到服务器IP,服务器IIS中做绑定,绑定时主机头为空;
2. 为了实现完全的二级域,建两个站点,一个为主站用,一个为用户用,两个站点目录都指到一个同一网站目录
3. 在Web程序中或取URL来源中的二级域名主机头,比如:abc.domain.cn 中的 abc;
4. 用获取来的二级域名名称,存入Session,方便取用
5. 用获取来的二级域名名称,用URL重写地址
实现方法:
域名A记录解析,就是做一个*.domain.cn的A记录解析到你服务器IP
方法一:二级域名URL转向
a. 建立站点,在IIS中绑定域名(win2003 - IIS6)
打开IIS,右击站点,然后属性,点击网站项IP地址的高级按钮,然后点编辑或添加来新增绑定,主机头值为空.
这里只要绑定一个就行了,绑定后将此站点默认访问文档设为Index.aspx,。
做好后,不管用什么样的二级前缀都会访问到这个网站。
下面来获取URL地址进行分析,下面是过程代码,用来获取及判断主机头,代码放在默认文档的首文件Index.aspx.cs中
///
///取得二级域主机头值,并实行转向
///
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.domain.cn/Error.aspx");//跳转到出错页面
return;
}
UserDomainName = UserHost[0].ToString(); //取得数组最前面一组值,及二级域名主机头
//进行特定判断,及是不要用到做为二级域名的主机头
if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "domain" || UserDomainName == null || UserDomainName.ToString()=="")
{
//你的动作
}
else {
HttpContext.Current.Response.Redirect("/User/");//跳转到用户目录,即是二级域名所要去到的目录,当然你也可以跳传至*.aspx?UserID=xxx这样的链接
return;
}
}
到这里已经可以实现abc.domain.cn跳转到指定的页面或链接了,但并不是真正的二级域名,只是URL转向而已。
方法二:真正的二级域名
a.建立站点
此时我们需要建立两个站点,一个主站点、一个二级域站点,二个站点的文件目录为同一目录,其目录中有Default.aspx及Index.aspx两个文件。建立方法如下:
a). 主站点建立方法参照方法一中的站点建立,不过,主机头非空,需设为www.domain.cn 与domain.cn ,当然,你也可以设置其它不想用来做二级域的主机头。站点默认访问文档为:Default.aspx。
b). 二级域站点建立方法与方法一中的站点建立一样,其默认访问文档为:Index.aspx。
b.现在我们要用到之前建立的二级域站点,我们将用户的数据放在根目录下的User目录中。
下面是/User目录中默认文档(Index.aspx.cs)的过程代码,主要用途是将二级域名主机头存入Session,方便调用,也是二级域(用户区)的首页文件
///
///取得二级域主机头值,存入Session["UserDomainName"]中
///
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.domain.cn//Error.aspx");//跳转到出错页面
return;
}
UserDomainName = UserHost[0].ToString();//取得数组最前面一组值,及二级域名主机头
//进行特定判断,及是不要用到做为二级域名的主机头
if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "domain" || 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.mspx?mfr=true
web.config 中的重写方法是:
~/Index\.aspx
~/User/Index.aspx
到这里已经实现二级域了,不管输入什么样的主机头(www.domain.cn 与 domain.cn除外,因为这两个域已经绑定到主站点中,优先访问到了主站点),就可以实现 abc.domain.cn访问到这个用户目录了,而且浏览器地址栏,出现的也是abc.domain.cn这样的域名地址,为了保证此二级域访问其它页面也保持二级域名的属性,也需同时做URL重写,在其它页面如需用到二级域主机头(用户名),从Session["UserDomainName"] 中取得即可,比如,要在User目录中的文件 test.aspx ,显示二级域主机头名称,同时需保持浏览器地址栏地址为: abc.domain.cn/test.aspx ,那么在web.config中添加URL重写规则:
~/test\.aspx
~/User/test.aspx
然后,test.aspx自身通过获取Session["UserDomainName"]的值或通过URL或取,来显示二级域主机头名称。
当然,你也可以直接将二级域站点单独绑定到这个User用户目录,取得URL中的主机头(用户名),但这样可能失去了与主站数据通讯的方便性.
分享到:
相关推荐
asp.net core二级域名实现.zip
创建一个Global.asax 在Application_BeginRequest事件下进行多级域名的跳转,可根据实际需要进行更改,源码都已打包,并已测试成功。可以把域名泛解析到127.0.0.1,这样就可以在本机上进行功能测试了,
asp.net 开发二级域名源代码,该程序用微软URLRewriter开发
ASP.NET中实现二级或多级域名ASP.NET中实现二级或多级域名(修改UrlRewrite) 大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 ...
用routing engine (System.Web.Routing) 来自动注册区域以实现多个Views
asp.net用url重写URLReWriter实现任意二级域名 高级篇.docx
域名泛解析 二级域名解析 C#二级域名解析 asp.net域名解析的代码
用asp.net实现二级域名重写的方法.对重写的一些问题做了汇总解答.提供了几段示例代码.好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑.来找...
本程序实现如何在SiteA 实现共享 SiteB 中Session 的信息;本程序介绍了如何在使用IHttpModule 在Init 中进行Session共享处理。以及站点密钥的使用。(注意一点的就是)两个站点如果要实现Session共享 相同密钥是...
asp.net c# Url重写 实现二级域名 包含所有源代码 注:要实现二级域名 如:http://test.abc.com 则顶级域名必须要支持泛域名解析 也就是说 您在域名解析的是时候,要有*.abc.com或*.abc.cn 即要有*.加上您的域名 这...
这个小例子的目的是实现对任意url的重写(但不包括二级域名的,有需要二级域名的也可以先了解下url重写的概念). 这个小项目的制作过程如下 1.需要对诸如http://jb51.net/viewnews/2009/3/2.html的url进行重写.将其重写...
URL重写 实现二级域名 C# (asp.net)
Asp.net 用url重写(URLReWriter)实现任意二级域名,需要的朋友可以参考下,建议先看一下上一篇文章。
ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...
Asp.net 用url重写(URLReWriter)实现任意二级域名
18.1.1 查看错误信息 18.1.2 页面级错误处理 18.1.3 应用程序级错误处理 18.2 跟踪和监视应用程序 18.2.1 跟踪页面的执行 18.2.2 监视ASP.NET进程 18.2.3 获取进程信息 18.3 记录...
跨二级域名 我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候...
操作步骤: ... 2、到7ik.net申请接口,选择B型服务(如果选择了其他类型的服务就无法使用本系统的功能...User.Asp是实现二级域名转发的接口文件! 你也可以使用其他的二级域名系统,只需存在User.Asp这个转发接口问题即可!