将所有流量从 URL1 重定向到 URL2,特定目录除外

Redirect all traffic from URL1 to URL2 except certain directory

我需要做的是将所有流量从 URL1 重定向到 URL2,除非请求 URI 是 /certain-directory。除此之外,我还需要将 URL1/certain-directory 中的所有内容重定向到 URL2/certain 目录。

以下是我在排查问题时提出的 2 条规则。

    <rule name="Redirect to certain-directory" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_URI}" pattern="^/certain-directory$" />
                    <add input="{HTTP_HOST}" pattern="^URL1$" />
    </conditions>
    <action type="Redirect" url="http://URL2/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
<rule name="Redirect from certain-directory" stopProcessing="false">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_URI}" pattern="^/$" negate="true" />
                    <add input="{REQUEST_URI}" pattern="^/certain-directory$" negate="true" />
                    <add input="{HTTP_HOST}" pattern="^URL2$" />
    </conditions>
    <action type="Redirect" url="http://URL1/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

原来我刚刚 request_uri 的结尾错了。而不是

<add input="{REQUEST_URI}" pattern="^/certain-directory$" negate="true" />

我刚好需要

<add input="{REQUEST_URI}" pattern="^/certain-directory" negate="true" />