我希望允许用户控制我正在玩弄的应用程序的子域,就像它所在的 Basecamp 一样customusername.seework.com
。
最终需要什么DNS
来允许这些动态创建并立即可用。
你建议如何在网站的逻辑中处理这个问题?在?Htaccess
中查找子域的规则DB
我希望允许用户控制我正在玩弄的应用程序的子域,就像它所在的 Basecamp 一样customusername.seework.com
。
最终需要什么DNS
来允许这些动态创建并立即可用。
你建议如何在网站的逻辑中处理这个问题?在?Htaccess
中查找子域的规则DB
我们这样做的方式是为我们在 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 或您喜欢的任何内容。
不用担心 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");
%>
诀窍是使用 URL 重写,以便name.domain.com透明地映射到服务器上的domain.com/users/name之类的东西。一旦你开始沿着这条路走下去,实施起来就相当简单了。
我想做类似的事情(www.mysite.com/SomeUser
)。
我所做的是我编辑404.shtml
包含这个服务器端包含(SSI)代码:
<!--#include virtual="404.php" -- >
然后我创建了文件404.php
,在其中解析 URL 以检查用户名并显示数据库中的信息。