ASP.NET实现二级域名(多用户,多商店)
本人所了解有两种方案,可能还有其的方式,希望大家多多讨论! 基本思路: 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[] { '.' }); //数组,以“.”分隔
,否则就跳传到其它页 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[] { '.' }); //数组,以“.”分隔
,否则就跳传到其它页 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;
}
}
}
}
ASP.NET实现二级域名(多用户,多商店)的更多相关文章
- asp.net 配置二级域名的共享session,并实现sso单点登录
公司最近做了一个新网站.原先网站的网址是www.xxxx.com.新做的网站要部署到info.xxxx.com.这两个网站要实现单点登录.而新老网站本身机构的原因,对于登录状态的判断,说白了就是对于s ...
- .net用url重写URLReWriter实现任意二级域名
.net用url重写URLReWriter实现任意二级域名 这两天需要用到URLReWriter来搞那个猪头的Blog,网上看到篇好文,收藏 摘要:解释了url重写的相关知识.用asp.net实现二级 ...
- ASP.NET二级域名站点共享Session状态
我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...
- asp.net基于StateServer的二级域名共享session
备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题.必有回复. 最近为实现的二级域名共享session纠结好久.网上的很多实现的方法试了都不行,查了很久才 ...
- asp.net core mvc中如何把二级域名绑定到特定的控制器上
由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...
- ASP.NET MVC3.0或4.0设置二级域名的方法
之前我就想做二级域名指向同一个IP同一个程序无非是在路由匹配规则上做文章也就是对Url的重写的一种思路.我用了半天时间上网查阅了相关资料并做了Demo测试是完全 以的,在这分享给大家... 假如网站主 ...
- asp.net 二级域名表单认证情况下共享Cookie
二级域名之间共享Cookie,很重要的一点就是配置,如下: domain设置为.ahdqxx.com,如果你的域名是www.ahdqxx.com,mall.ahdqxx.com,那么请设置你的doma ...
- asp.net MVC把Areas区域绑定成二级域名
先分析需求 在MVC项目中,我们如果有两个Areas.比如Test和DEMO.我们的访问地址应该是 http://localhost:8098/test http://localhost:8098/d ...
- Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写
最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent ...
随机推荐
- 关于使用Element.getNodeValue()返回NULL的问题
使用DOM方法解析XML数据, 比如这个xml:<root> <name>admin</name></root> 在程序中读取 Document do ...
- servlet单例多线程
Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...
- jstat命令(Java Virtual Machine Statistics Monitoring Tool)
1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...
- squid透明代理+iptables防火墙,多网卡详细配置
squid透明代理+iptables防火墙详细配置 看到很多人都在不停地问iptables+squid做透明代理的问题,鄙人不才,斗胆在此做统一解答.如有任何纰漏还望各位批评指教. ========= ...
- poj2752 bzoj3670
2752这是一道关于next函数的题(其实好像也可以用后缀数组暴力搞搞,但大概会超时)根据next[i]=max{j} (s[0..j]=s[i-j..i] j<i)不难发现这正是某个串既是前缀 ...
- 关于下拉刷新你是否真的非常理解还是只会搬砖?附 Android 实例子源代码文件下载地址380个合集
1,推荐几篇非常有用的博文 原创写的真的非常好 主要讲解原理,整体布局三部分组成以及设置padding等等作用, 下拉的具体实现 滑动到底部具体加载以及判断手势事件,再次推荐作者的 详细讲解 建议先看 ...
- 【狼】unity 鼠标拖拽物体实现任意角度自旋转
主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长 ...
- tyvj P1864 [Poetize I]守卫者的挑战(DP+概率)
P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...
- Java正则表达式(1)
String类的三个内建正则表达式工具: 1.matches()方法 示例:检查一个句子是否以大写字母开头,以句号结尾 public static boolean checkFormat(String ...
- JuliaSet&MandelBulb @ Maya&KK —— 4亿粒子的测试
分形是数学里最美的一个话题之一,美在 无限的细节 在尺寸上的自相似 这两个特征造成的牛逼效果就是随便选择分形上的一个小坑或者小山包拉进后又是一个广阔的世界,而把这个世界中的一个小坑或者小山包拉进又™是 ...