30

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

这里描述了类似的东西:

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

谢谢

4

6 回答 6

42

答案是否定的,IIS7(仍然)不支持通配符主机名(请参阅this)。如果您想在一个网站上服务多个域,目前唯一的解决方法,正如 notandy 建议的那样,是使用专用 IP 并使用支持通配符的 DNS 来实现。

2013 更新

为了完整起见,IIS8 还没有这个特性。

2016 更新

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

于 2009-04-14T00:39:03.890 回答
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/,您应该获得与配置相同的网页。

来源

于 2009-03-06T00:13:29.690 回答
6

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

于 2012-05-23T14:19:34.390 回答
4

如果您使用 Web 平台安装程序 ( http://www.microsoft.com/web/downloads/platform.aspx ) 并安装“URL 重写”模块,则可以使用 IIS。如果您添加“*.example.com”之类的“A”记录,这将允许将所有子域发送到您的 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-协议-http-https-in-the-action

于 2014-08-14T18:57:09.840 回答
0

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

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

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

链接已损坏,以前是 http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis

于 2014-10-22T23:06:29.087 回答
0

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

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

  1. 创建一个绑定到 *:80 且没有主机名的包罗万象的站点。
  2. 创建绑定到 *:8091 且没有主机名的第一个站点。
  3. 创建绑定到 *:8092 且没有主机名的第二个站点。
  4. 测试两个站点并继续前进。
  5. 安装 ARR 和 URL 重写模块。
  6. 在包罗万象的站点上创建重写规则以将请求发送到两个站点,

    <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 有它的开销(但一般来说可以忽略不计)。

于 2018-09-18T00:39:53.917 回答