IIS 8 URL 重写模块,用于将非 WWW 重定向到 WWW(具有子域的 URLs 除外)

IIS 8 URL Rewrite Module for redirecting Non-WWW to WWW (except URLs with sub-domains)

我正在将我所有网站的非 www 版本的域重定向到 www 版本。

但是,副作用是它还会使用 www

重定向子域

例如api.example.com 到 www.api.example.com

这不是我想要的。我需要所有带有子域的站点都不要在 www.

前面加上

这是我目前的规则:

<system.webServer>
    <rewrite>
        <globalRules>
            <clear />
            <rule name="non-www to www" enabled="true" stopProcessing="false">
                <match url=".*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" />
                </conditions>
                <action type="Redirect" url="{C:1}://www.{C:2}" />
            </rule>     

            <rule name="http to https" stopProcessing="true">
                <match url="(.*)" /> <!-- Require SSL must be OFF in the site settings -->
                <conditions>
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" />
            </rule>
        </globalRules>
    </rewrite>
</system.webServer>

如果输入不是以 'www' 开头且不是子域,是否可以制定仅重定向到 www.example.com 的规则?

任何有子域的东西都不能在 www

前面

请帮忙,因为我已经尝试了两天但没有成功。

提前致谢!!

您需要将正则表达式更改为:^[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$,此正则表达式将仅捕获 second-level 个域。

我从这个答案中得到它:

最后你的规则将是这样的:

<rule name="non-www to www and https" enabled="true" stopProcessing="false">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$" />
    </conditions>
    <action type="Redirect" url="https://www.{HTTP_HOST}" />
</rule>