如何以编程方式为IIS7创建子域?

时间:2011-01-11 08:26:14

标签: c# asp.net iis-7 subdomain saas

我正在用IIS7托管的C#/ ASP.NET中编写一个SaaS应用程序。我想为每个注册的客户创建一个个性化的子域名,即fred.mydomain.com,bob.mydomain.com,每个客户都指向同一个应用程序,每个客户只有不同的皮肤。

如何以编程方式创建这些子域?

2 个答案:

答案 0 :(得分:6)

使用URL Rewrite for IIS7将user.mydomain.com(用户不是www,邮件或其他现有真实子域)等所有请求映射到mydomain.com/myapp?id=user然后在脚本中处理您需要的任何主题

您无需为每个创建的用户添加规则。只需创建一个通用规则即可。

而且,在您的服务器DNS中,您需要将* .mydomain.com(其中*不是www,邮件或其他现有的真实子域)转发到mydomain.com IP。这很简单。您已拥有现有子域的DNS记录。只需添加* .mydomain.com并指向mydomain.com即可。这将是DNS技巧的一部分。其他部分位于URL Rewrite

答案 1 :(得分:6)

当然意识到有人已经通过告诉你做重定向来回答你的问题,似乎更简单的方法就是获取主机服务器变量。

  1. 设置IIS以便所有传入请求(无论主机如何) header)指向这一个应用程序。所有站点都必须在IIS中具有唯一的主机名或唯一端口,因此您可以通过以下方式设置它:

    1. 将网站绑定到默认端口80。

    2. 在“主机名”字段中未提供任何内容。这也是首次安装IIS时默认设置默认网站的方式。

  2. 计算出服务器的静态IP地址,并告诉每个新客户注册将其域的DNS指向该IP。或者,如果您将拥有域名,请设置一个catchall DNS条目:* .mydomain.com - 指向您服务器的IP地址。

  3. 在您的应用程序中,检查当前 主机头为了提供一个 不同的皮肤或母版页。

  4. 这应该从代码中获取主机头:

      Request.ServerVariables["HTTP_HOST"]
    

    从那里,您可以根据一组数据库值测试其值,您必须根据该URL确定需要加载哪个MasterPage / css样式表/ etc。请记住,如果您执行此类捕获,则需要考虑错误输入的网址,因此您不会将皮肤与其匹配。