关于 web.config 中从文件夹到子文件夹的 301 重定向的混淆

confusion regarding 301 redirect from folder to subfolder in web.config

说我的 api 在这个 url 下 http://www.example.net/api/trythis 并且我想重定向到 http://www.example.net/api/v1/trythis,所以将来我可以有 http://www.example.net/api/v2/trythishttp://www.example.net/api/v3/trythis

我正考虑在 web.config 中这样做:

  <system.webServer>
        <rewrite>
            <rules>
                <rule name="Root Hit Redirect" stopProcessing="true">
                    <match url="/api/*" />
                    <action type="Redirect" url="/api/v1/*" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

但是,如果有人访问 url /api/v2/trythis or /ap1/v3/trythis,他们不会被重定向到 /api/v1/trythis 吗?所以它会破坏版本控制的目的吗?

按照你的规则,会导致多次重定向错误。由于 "api/v1" 也匹配 "api".

要解决此问题,您应该在 url 重写规则中设置条件以避免多重匹配。

详情可参考以下规则:

     <rule name="Root Hit Redirect" stopProcessing="true">
      <match url="api/(.*)" />
      <action type="Redirect" url="http://yousitedomain.com/api/v1/{R:1}"  />
                <conditions>
                    <add input="{PATH_INFO}" pattern="api/v1/(.*)"  negate="true"/>
                </conditions>
    </rule>

如果你想避免v2,v3,我建议你可以按照上面的设置添加多个条件。