通过编程创建子域名

13

我正在寻找一种在ASP.NET、ASP.NET MVC和PHP中以编程方式创建子域的解决方案。具体来说,用户个人资料页面应该可以同时通过以下两种方式访问:www.domain.com/profilenamehttp://profilename.domain.com


1
这个问题实际上是无法回答的。您最好一次解决其中的一个部分。DNS设置、.NET代码、PHP代码等等... - Clarence Klopfstein
是的,你说得对,我并不是在寻找解决方案,而是想知道它是如何实现的...虽然我期望看到一些编写HttpModuleHandlers和asp.net 4中新路由属性的代码...但我认为更有趣的答案将会在这里发布 :) - Kubi
3个回答

37

更新该特定域名的DNS设置,以便*.domain.com都指向同一主机。

然后,编程检查并查看使用的URL的第一部分是否包含您要查找的子域名,并相应地采取行动。例如,如果第一部分包含给定的profilename,则从数据库中检索该特定配置文件集合的数据并将其显示给用户。

确保您的Web应用程序使用相对链接,以便如果用户使用子域名到达站点,则不会将其重定向到其他位置。


谢谢!正是我所寻找的。 - Hnatt

3

没有通用的方法来创建子域名。您需要调用由您的ISP或DNS提供商提供的API--通常是SOAP或REST。

除此之外,还可以使用通配符域名(*)。

在IIS方面,确保配置应用程序以便它不使用主机标头。


5
每个执行此类操作的网站都使用通配符域名。实际上创建单独的DNS条目会导致DNS传播延迟很长,区域文件膨胀得无法承受等问题。 - Frank Farmer
1
这取决于您需要多少子域名(OP没有具体说明)。通配符并不总是最好的选择,特别是如果您关心可扩展性。以下是一个由托管DNS服务提供的创建新子域的示例API链接:https://durabledns.com/help/downloads/DurableDNS%20SOAP%20API%20Documentation%20v3.0.pdf - RickNZ

3
你可以尝试以下方法:
AppDomain subDomain = AppDomain.CreateDomain("ProfileUserDomain");
尽管你可能需要配置DNS以允许代码请求,但动态DNS服务可能是你的答案。

谢谢您的回答。您是否有关于在IIS上配置动态DNS服务的信息? - Kubi
我不确定如何将动态DNS软件添加到您的Web服务器或Windows服务器上,但是希望使用专用服务器上的帐户可以帮助您:http://howto.wired.com/wiki/Set_Up_Dynamic_DNS - user1493728

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,