IIS 将子目录重定向到具有相同名称的根级目录

IIS redirect a subdirectory to a root-level directory with the same name

我想在 IIS 中设置重定向,将我站点上以 /blog 结尾的所有多级 URL 重定向到名为 /blog 的根级子目录。例如,https://www.example.com/sub1/sub2/blog 将重定向到 https://www.example.com/blog

我写了以下正则表达式模式:

blog/?$

问题是,虽然它确实匹配 https://www.example.com/sub1/sub2/blog,但它也匹配 https://www.example.com/blog,它本身就是我要重定向到的 URL。因此,点击 /sub1/sub2/blog 重定向到 /blog,它本身匹配并重定向到 /blog,等等,导致它陷入重定向到自身的循环。

如何编写正则表达式模式,以便以 /blog 结尾的多级 URL 将重定向到根级 /blog 页面,而不是根级页面本身是否匹配?

请试试这个

 <rule name="rewrite rule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{URL}" pattern="^/(.+)/blog/?$" />
                    </conditions>
                    <action type="Redirect" url="https://www.example.com/blog" redirectType="Temporary" />
                </rule>

或者你可以加入白名单

  <rule name="rewrite rule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{URL}" pattern="blog/?$" />
                        <add input="{URL}" pattern="^/blog/?$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="https://www.example.com/blog" redirectType="Temporary" />
                </rule>