关于 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/trythis
或 http://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,我建议你可以按照上面的设置添加多个条件。
说我的 api 在这个 url 下
http://www.example.net/api/trythis
并且我想重定向到 http://www.example.net/api/v1/trythis
,所以将来我可以有 http://www.example.net/api/v2/trythis
或 http://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,我建议你可以按照上面的设置添加多个条件。