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

Sha*_*ica 9 c# asp.net subdomain iis-7 saas

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

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

Sar*_*fan 6

使用IIS 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中


Mic*_*Cox 6

当然,通过告诉你做重定向来实现某人已经回答了你的问题,似乎更简单的方法就是获取主机服务器变量.

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

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

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

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

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

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

  Request.ServerVariables["HTTP_HOST"]
Run Code Online (Sandbox Code Playgroud)

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