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

Translate

我希望允许用户控制我正在玩的应用程序的子域,就像Basecamp一样customusername.seework.com.

要求什么DNS最后允许它们动态创建并立即可用。

您如何建议按照网站的逻辑处理此问题?Htaccess在子域中查找子域的规则DB?

This question and all comments follow the "Attribution Required."

所有的回答

Mat
Translate

我们这样做的方法是对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或您喜欢的任何对象。

来源
Translate

不用担心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");
%>
来源
Translate

诀窍是使用URL重写,以便name.domain.com透明地映射到类似domain.com/users/name在您的服务器上。一旦走上这条路,就可以轻松实现。

来源
Translate

我一直想做类似的事情(www.mysite.com/SomeUser).

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

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

然后我创建了文件404.php,我在其中解析URL来检查用户名,并从数据库中显示其信息。

来源
上一个问题:
开源Ruby项目