Cal*_*ton 23 subdomain dns account web-applications
我希望允许用户控制我正在使用的应用程序的子域,就像Basecamp所在的那样customusername.seework.com.
DNS最终需要什么才能动态创建并立即可用.
你如何建议在网站的逻辑中处理这个问题?Htaccess规则查找子域名DB?
Mat*_*Mat 14
我们这样做的方法是在DNS中注册我们的域名"全部捕获",以便anything.ourdomain.com指向我们的服务器.
使用Apache,您可以为您的vhost设置类似的catch-all.ServerName必须是单个静态名称,但ServerAlias指令可以包含模式.
Servername www.ourdomain.com
ServerAlias *.ourdomain.com
Run Code Online (Sandbox Code Playgroud)
现在所有域都将触发我们项目的vhost.最后一部分是解码实际使用的域名,以便您可以在代码中计算出用户名,如(PHP):
list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] );
Run Code Online (Sandbox Code Playgroud)
或者已经建议的RewriteRule将user.ourdomain.com/foo/bar静默地映射到www.ourdomain.com/foo/bar?user=user或您喜欢的任何内容.
不要担心DNS和URL重写
您的DNS记录将是静态的,例如:
*.YOURDOMAIN.COM A 123.123.123.123
Run Code Online (Sandbox Code Playgroud)
请求您的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");
%>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4266 次 |
| 最近记录: |