IIS7中的通配符子域。是否有可能使它们像在Apache中一样?

问题描述 投票:30回答:6

这是否可以配置IIS7以实现像Apache一样的关于通配符域的功能?我对基于URL中使用的子域用户在ASP.NET Web应用程序中路由用户感兴趣。

这里描述的东西如下:

http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain

谢谢

apache iis-7 subdomain wildcard
6个回答
40
投票

答案是否,IIS7(仍然)不支持通配符主机名(请参阅this)。如果你想在一个网站上提供多个域名,那么现在唯一的解决方法就是使用专用的IP并使用支持通配符的DNS来实现。

2013 Update

为了完整起见,IIS8还没有此功能。

2016 Update

最后,Windows 2016中的IIS 10支持通配符子域。


16
投票

IIS是否支持通配符主机标头?我可以捕获* .mydomain.com并将其重定向到一个网站吗?

答案是肯定/否定。是的,因为您可以将* .mydomain.com重定向到一个网站。不,因为神奇是在DNS而不是IIS。

这是你如何做到的: 在IIS MMC中,配置一个没有主机头的网站,然后为该站点分配IP地址。 (如果框中有一个IP地址,则可以跳过此处)。有了这个,网站将绑定到特定的IP,并将监听发送到IP的所有HTTP请求,你就完成了:)

下一步是确保您的名称解析适用于通配符查询并使用正确的IP地址进行回复。如果您使用Microsoft DNS服务,它将不允许您创建'*'A记录(假设您已在DNS MMC中创建了域区域),您需要执行以下操作:

  1. 导航到%windir%\system32\dns\
  2. 找到区域文件。例如。 mydomain.com.dns,用记事本打开它
  3. 添加条目。例如。 * A IP.IP.IP.IP
  4. 保存区域数据文件
  5. 在DNS MMC中重新加载区域数据。

请注意,通过执行此操作,所有*将响应您之前配置的IP。例如。 abc.mydomain.com,www.mydomain.com,K2k.mydomain.com等。

要验证它是否正常工作,请尝试ping实用程序ping (insert anything here).mydomain.com,您应该收到来自IP.IP.IP.IP的回复

然后尝试浏览,http://(在此处插入任何内容).mydomain.com /,您应该获得已配置的相同网页。

Source


5
投票

您无法在Microsoft的DNS中创建通配符(*)A记录,但您可以创建通配符CNAME。如果您要做的只是将所有子域指向特定的IP,这将起作用。例如,如果你有www.mydomain.com的A记录,你可以为CNAME添加一个*.mydomain.com记录并指向www.mydomain.com。请求标头中的主机名仍然是子域,因此您的Web应用程序应该能够捕获它并在需要时处理它。


4
投票

如果使用Web平台安装程序(http://www.microsoft.com/web/downloads/platform.aspx)并安装“URL重写”模块,则可以使用IIS。如果添加“A”记录(如“* .example.com”),则允许将所有子域发送到IIS服务器。在IIS服务器中,您只需将URL重写规则添加到默认网站即可执行任何操作,例如重定向到另一个URL。当用户输入“xyz.example.com”时,您可以重定向到“example.com”,并将所有未知子域指向根域。步骤是:

  1. 安装Web平台安装程序:http://www.microsoft.com/web/downloads/platform.aspx 运行它,搜索“URL Rewrite”,然后安装它。
  2. 转到默认网站,然后打开“URL重写”。
  3. 点击最右侧的“添加规则”。
  4. 命名规则并设置以下内容: 请求的URL:匹配模式 使用:正则表达式 模式:(。*) 逻辑分组:全部匹配
  5. 添加新条件(单击“添加..”按钮),然后设置: 条件输入:{CACHE_URL} 检查输入字符串是否匹配模式 模式(根据需要修改):( http | https)://(。*?)\ .rootdomain \ .tld 单击[确定]。
  6. 现在向下滚动到操作并设置: 操作类型:重定向 重定向URL(根据需要进行修改):{C:1}://rootdomain.tld {R:0}

当您单击正则表达式模式条目旁边的“测试模式”按钮时,“{C:#}”和“{R:#}”来自测试窗口。您可以匹配部分服务器值并在以后重复使用。

此外,您可能希望在传递URL中的HTTP / HTTPS(上面的步骤6中的“{C:1}”)时查看此提示:http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action


0
投票

更新2:链接中断,升级到IIS 10,它现在支持通配符。

更新:这有一段时间了,过了一段时间我被多个请求轰炸了。我不推荐这种方法。

确保您的DNS记录设置正确(* - > @的CNAME记录),它将完美无缺地运行。测试了多个域。

链接破坏现在曾经是http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis


0
投票

对于无法升级到IIS 10+的用户,通过反向代理启用通配符主机名并不是很困难。

HTTP示例如下,而其他设置只是几个步骤。

  1. 创建一个绑定到*:80并且没有主机名的catch-all站点。
  2. 创建绑定到*:8091的第一个站点,没有主机名。
  3. 创建绑定到*:8092且没有主机名的第二个站点。
  4. 测试两个站点并继续前进。
  5. 安装ARR和URL重写模块。
  6. 在catch-all站点上创建重写规则以将请求分派给两个站点, <system.webServer> <rewrite> <rules> <rule name="site1" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site1.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8091/{R:0}" /> </rule> <rule name="site2" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site2.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8092/{R:0}" /> </rule> </rules> </rewrite> </system.webServer>

请注意,在服务器级别,必须打开ARR代理模式,

    <system.webServer>
        <proxy enabled="true" />
    </system.webServer>

IIS 10通配符主机名更简单,性能也更好,因为ARR有其开销(但一般来说可以忽略不计)。

© www.soinside.com 2019 - 2024. All rights reserved.