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

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

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

使用IIS 重写 user.mydomain.com将所有请求(例如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. 设置IIS,以便所有传入请求(无论主机标头)指向这一个应用程序。 所有站点都必须在IIS中具有唯一的主机名或唯一端口,因此您可以通过以下方式设置:

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

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

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

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

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

  Request.ServerVariables["HTTP_HOST"] 

从那里,您可以根据一组数据库值测试其值,您必须根据该URL确定需要加载哪个MasterPage / css样式表/ etc。 请记住,如果你做了这样的捕获,你需要考虑一个错误的URL,因此你没有皮肤可以匹配它。