使用url重写将子域从一个域重定向到另一个域的iis子域

时间:2018-02-17 06:42:29

标签: iis url-rewriting .net-core

我想将来自iis的子域重定向到我的dotnet核心应用程序正在运行的localhost:port中的子域。

我想要像这样重定向:

xyz.example.com => xyz.localhost:4000

john.example.com => john.localhost:4000

test.example.com => test.localhost:4000

example.com => localhost:4000(没有子域地址重定向到localhost:4000)

我如何使用网址重写规则执行此操作?是

编辑:

有一个子域名的解决方案(例如此question)但我的问题更为笼统,即将所有子域名从一个域名重定向到另一个域名中的相应子域名。

1 个答案:

答案 0 :(得分:1)

以下是执行您要求的重定向的规则:

<rewrite>
    <rules>
        <rule name="Test Rule" stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^((.+.)?)example.com" />
            </conditions>
            <action type="Redirect" url="http://{C:1}localhost:4000{REQUEST_URI}" appendQueryString="false" />
        </rule>
    </rules>
</rewrite>

这很简单:

  1. <match url=".*" />匹配任何网址。请求URL是否在example.com域中,将在以后检查。 match部分对我们的案例没用,因为它使用没有主机名的URL部分(首先是'/')。

  2. 条件<add input="{HTTP_HOST}" pattern="^((.+.)?)example.com" />匹配xyz.example.comexample.com等域名。如果条件匹配,则捕获组{C:1}将包含xyz.的{​​{1}}和xyz.example.com的空字符串,将进一步使用。

  3. example.com

    结果网址构建为<action type="Redirect" url="http://{C:1}localhost:4000{REQUEST_URI}" appendQueryString="false" />http://{C:1}localhost:4000{REQUEST_URI}将保留如上所述的子域名,{C:1}包含主机名后面的URL部分。我们还将{REQUEST_URI}设置为appendQueryString,因为查询是false的一部分。

  4. 您应该将此{REQUEST_URI}部分添加到<rewrite>下的网站web.config。您也可以从IIS配置管理器手动配置它。以下是此类配置的屏幕截图:

    enter image description here

    最后,这是一组演示如何更改网址的测试:

    <system.webServer>