如何在Web应用程序中创建子域用户帐户

时间:2020-03-05 18:37:31  来源:igfitidea点击:

我希望允许用户控制我正在玩的应用程序的子域,就像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来检查用户名,并从数据库中显示其信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。