如何检测您网站的域名?

时间:2010-09-08 23:31:07

标签: c# asp.net asp.net-mvc-2 iis-7

我不知道标题中的问题是否足够明确。

假设您有2个或N个域指向同一个IP地址,您的服务器(在我的情况下是带有IIS的Windows Server),并且您希望为每个域名制作自定义站点,因此您必须检测哪个域是用户目前正在使用。

应该有两个“自定义网站”。一个是管理应用程序站点,只有一个域名指向它,另一个是处理多个域名的应用程序,并基于它显示不同的站点。

很好的例子是shoutem网络。在http://www.shoutem.com/是管理页面,而应用程序实例是http://zrikka.com/http://punkt.com.hr,用于处理不同域名的单独应用程序。

有可能吗?

4 个答案:

答案 0 :(得分:3)

您想要完成的内容不是在ASP.Net内部处理,而是在IIS级别处理。您可以指定IIS中每个“站点”应处理的域。通常,您将拥有一个处理所有解析为IP的域的域,但是如果所有域都绑定到完全不同的docroots(即不同的应用程序/站点文件),则可以将多个站点绑定到IP。关键是您不必在应用程序代码中担心这一点。

Here's the MSDN docs on how to do it in IIS6

答案 1 :(得分:2)

在HTTP协议级别,这是使用Host:标头完成的。例如,对根页面的简单GET请求可能如下所示:

GET / HTTP/1.1
Host: example.com

在这种情况下,Host:标头告诉服务器浏览器转到网站example.com并正在寻找该网站的根页(/)。另一个请求可能是:

GET / HTTP/1.1
Host: example.org

如果同一服务器同时处理example.comexample.org,则HTTP服务器可以通过这种方式区分请求。

在您的情况下,IIS是接收这些标头并将请求定向到相应站点的组件。

答案 2 :(得分:1)

如果您希望单个应用程序处理同一IP上的不同域,则应检查您的请求上下文,例如:

string host = HttpContext.Current.Request.Url.Host;
switch (host.ToLower())
{
    case "domain1.com":
    // do something
    break;
    case "domain2.com":
    // do something
    break;
    default: //unknown domain
    // do something
    break;
}

知道您可以处理哪些主机地址,请检查它。

如果您想将不同的域指向同一IP和IIS上的不同网站,则应配置IIS,在这种情况下请查看Tim的答案。

答案 3 :(得分:0)

这将为您提供您网站的域名:

HttpContext.Current.Request.Url.Authority

或者用更合适的内容替换.Authority