如何在Web应用程序中创建子域用户帐户
我希望允许用户控制我正在玩的应用程序的子域,就像Basecamp一样,它是" customusername.seework.com"。
DNS端需要什么才能使它们动态创建并立即可用。
我们如何建议按照网站的逻辑处理此问题?用" Htaccess"规则在" DB"中查找子域?
解决方案
回答
诀窍是使用URL重写,以便name.domain.com透明地映射到服务器上的domain.com/users/name之类的内容。一旦沿着这条道路走,就很容易实现。
回答
不用担心DNS和URL重写
DNS记录将是静态的,例如:
*.YOURDOMAIN.COM A 123.123.123.123
要求DNS提供商为我们执行此操作(如果尚未完成),或者如果我们可以控制DNS记录,则由我们自己进行。这将自动将所有子域(当前和将来的子域)指向同一个HTTP服务器。
完成后,我们只需要在每个http请求上解析HOST标头,即可检测用于访问http服务器上服务器端脚本的主机名。
假设我们使用的是ASP.NET,这是我想到的一个愚蠢的示例,但是可以正常工作,并且演示了此方法的简单性:
<%@ Language="C#" %> <% string subDomain = Request.Url.Host.Split('.')[0].ToUpper(); if (subDomain == "CLIENTXXX") Response.Write("Hello CLIENTXXX, your secret number is 33"); else if (subDomain == "CLIENTYYY") Response.Write("Hello CLIENTYYY, your secret number is 44"); else Response.Write(subDomain+" doesn't exist"); %>
回答
我们这样做的方法是对DNS中注册的域名进行"全部捕获",以便any.ourdomain.com都指向我们的服务器。
使用Apache,我们可以为虚拟主机设置类似的功能。 ServerName必须是单个静态名称,但是ServerAlias指令可以包含模式。
Servername www.ourdomain.com ServerAlias *.ourdomain.com
现在,所有域都将触发我们项目的虚拟主机。最后一部分是解码实际使用的域名,以便我们可以在代码中计算出用户名,例如(PHP):
list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] );
或者已经建议的RewriteRule可以将user.ourdomain.com/foo/bar静默映射到www.ourdomain.com/foo/bar?user=user或者我们喜欢的任何对象。
回答
我一直想做类似的事情(www.mysite.com / SomeUser
)。
我所做的是编辑" 404.shtml"以包含此服务器端包含(SSI)代码:
<!--#include virtual="404.php" -- >
然后,我创建了文件404.php,在其中解析URL来检查用户名,并从数据库中显示其信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。