.Net Core / IIS 网络配置重写规则

.Net Core / IIS web config rewrite rules

在我的情况下,我有两个域:

domain.com
domain1.com

其中 domain1.comdomain.com

的别名

对于 domain1.com,我只想允许以 api/ 开头的网址的流量,并将所有其他流量重定向到 domain.com,状态代码为 301。

即我想允许像 domain1.com/api/products/list 这样的请求,另一方面我想将 domain1.com/products/list 重定向到 domain.com

任何人都可以指导如何使用 web.config 实现这一目标吗?

遵循 URL 重定向规则应该有效。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Domain1">
                    <match url="^(.+)" />
                    <conditions>
                        <add input="{HTTP_URL}" pattern="^/api/(.+)" negate="true" /> 
                    </conditions>
                    <action type="Redirect" url="http://domain/{R:1}" redirectType="Permanent" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

快速解释。

  • 如果需要,我们使用 match 模式捕获整个传入 URL 用于重定向的反向引用。
  • 而在 conditions 中我们否定了 API URLs 模式,因此该规则适用于 URLs not 包含 /api.
  • 重定向操作采用捕获的反向引用并将其附加到域。

注释。

  • 您可能需要调整规则中的斜杠,我假设 /api 之后总会有一个斜杠。
  • 浏览器大量缓存永久重定向,请确保每次修改规则时都使用 Incognito/Private 会话。