如何在web应用中创建子域用户帐户

我正在寻找允许用户控制我正在玩的应用程序的子域,就像Basecamp,它是 customusername.seework.com

DNS 端需要什么以允许这些动态创建并动态地立即可用。

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

0
额外 编辑
意见: 2

4 答案

我们这样做的方式是为我们在DNS中注册的域名设置一个'all all',这样anything.ourdomain.com就会指向我们的服务器。

使用Apache,你可以为你的虚拟主机设置一个类似的catch-all。 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或任何你喜欢的东西。

0
额外
你如何在IIS上设置类似的catch-all
额外 作者 Vikram,

窍门是使用URL重写,以便 name.domain.com 透明地映射到服务器上的 domain.com/users/name 之类的内容。一旦你开始了这条道路,实施起来相当简单。

0
额外
@议会:它不需要重定向,不。重写可以是透明的(例如,您访问的每个WordPress网站几乎都有友好的URL,但实际上这些请求会转到index.php)。
额外 作者 Dave Ward,
这是否会导致地址栏中的url重定向和更改?我正在寻找保持username.domain.com的URL不能重定向到domain.com/username
额外 作者 parliament,

不要担心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");
%>
0
额外

我正在寻找类似的东西( www.mysite.com/SomeUser )。

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

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

Then I created the file 404.php, where I parsed the URL to check for a user's name and showed their info from the database.

0
额外