IIS 10下WordPress子文件夹更名后的URL永久重定向配置问题
解决IIS 10中ASP.NET MVC站点下WordPress应用别名重定向问题
问题背景
ASP.NET MVC项目部署在IIS 10,站点下的WordPress应用原别名为oldblog,现已改为blog。需要将所有指向/oldblog/*的请求永久重定向到/blog/*,要求完整保留原URI的路径部分和查询字符串,仅替换别名。
现有重写规则仅部分生效,URI其余部分跳转结果不稳定,规则如下:
<rule name="Rewrite /oldblog to /blog" stopProcessing="true"> <match url="^oldblog(.*)$" ignoreCase="true" /> <action type="Redirect" url="https://www.example.com/blog/{R:1}" redirectType="Permanent" /> </rule>
修正后的重定向规则
使用以下规则可实现稳定的全路径重定向:
<rule name="Permanent Redirect /oldblog to /blog" stopProcessing="true"> <match url="^oldblog(.*)$" ignoreCase="true" /> <action type="Redirect" url="/blog{R:1}" redirectType="Permanent" appendQueryString="true" /> </rule>
关键调整说明
- 相对路径替代绝对路径:将硬编码的域名路径改为
/blog{R:1},提升配置灵活性,避免域名变更后需重新修改规则。 - 显式保留查询字符串:添加
appendQueryString="true",确保原请求的查询字符串(如?utm_source=xxx)被完整传递到新地址。 - 修正路径拼接逻辑:去掉
/blog与{R:1}之间的斜杠,避免当R:1为空时出现冗余路径(若需强制跳转后路径带尾部斜杠,可单独添加补充规则)。
验证案例
以下场景均可正确跳转:
/oldblog/→/blog//oldblog/category/somecategory/→/blog/category/somecategory//oldblog/post/123/?utm_source=google→/blog/post/123/?utm_source=google
配置注意事项
确保该规则配置在根ASP.NET MVC站点的web.config的<rewrite><rules>节点下,而非旧oldblog应用程序的配置文件中(旧应用可能已停用,规则无法触发)。
内容的提问来源于stack exchange,提问作者rwkiii
相关产品推荐
相关产品推荐

