如何在webapp中创建子域用户帐户

时间:2008-08-04 12:22:08

标签: web-applications dns subdomain account

我希望允许用户控制我正在使用的应用的子域名,就像Basecamp那样customusername.seework.com

DNS端需要什么才能动态创建并立即可用。

你如何建议在网站的逻辑中处理这个问题? Htaccess规则在DB

中查找子域名

4 个答案:

答案 0 :(得分:14)

我们这样做的方法是在DNS中注册我们的域名“全部捕获”,以便anything.ourdomain.com指向我们的服务器。

使用Apache,您可以为您的vhost设置类似的catch-all。 ServerName必须是单个静态名称,但ServerAlias指令可以包含模式。

Servername www.ourdomain.com
ServerAlias *.ourdomain.com

现在所有域都将触发我们项目的vhost。最后一部分是解码实际使用的域名,以便您可以在代码中计算出用户名,例如(PHP):

list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] );

或已建议的RewriteRule将user.ourdomain.com/foo/bar静默映射到www.ourdomain.com/foo/bar?user=user或您喜欢的任何内容。

答案 1 :(得分:8)

不要担心DNS和网址重写

您的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");
%>

答案 2 :(得分:2)

诀窍是使用网址重写,以便 name.domain.com 透明地映射到服务器上的 domain.com/users/name 。一旦你开始走这条道路,实施它是相当简单的。

答案 3 :(得分:0)

我希望做类似的事情(www.mysite.com/SomeUser)。

我做的是编辑404.shtml以包含此服务器端包含(SSI)代码:

<!--#include virtual="404.php" -- >

然后我创建了文件404.php,在那里我解析了URL以检查用户的名字并从数据库中显示他们的信息。