2008-08-04 97 views
21

我正在寻找允许用户控制我正在玩的应用的子域,很像Basecamp,它在customusername.seework.com如何在web应用中创建子域用户帐户

DNS end需要什么以允许动态创建并立即可用。

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

回答

13

我们做到这一点的办法是有一个“抓全部“用于我们在DNS中注册的域名,这样anything.ourdomain.com将指向我们的服务器。

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

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

现在所有的域都会触发我们项目的虚拟主机。最后一部分是解码域名实际使用,这样就可以在你的代码工作了用户名,像(PHP):

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

或重写规则作为已经表明,默默映射user.ourdomain.com /富/酒吧www.ourdomain.com/foo/bar?user=user或任何你喜欢的。

2

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

+0

会导致重定向和地址栏中的网址更改?我正在寻找的URL保持username.domain.com不重定向到域名/用户名 – parliament 2014-10-02 14:17:50

+1

@议会:它不需要重定向,不。重写可以是透明的(例如,您访问的每个WordPress网站几乎都有友好的URL,但实际上这些请求会转到index.php)。 – 2014-10-02 23:33:04

8

不要担心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" -- > 

然后,我创建的文件404.php,在这里我分析的URL来检查用户名和边打边来自数据库的信息。

相关问题