如何将带GUID参数的ASP.NET MVC网站重定向至维护页面?
解决IIS10中带GUID的URL无法跳转至维护页的问题
我之前帮不少客户处理过类似的IIS维护页跳转问题,你的情况核心在于:当你修改站点物理路径指向维护页目录时,IIS默认只会处理完全匹配静态路径的请求,而带末尾GUID的URL属于动态扩展路径,IIS还在尝试沿用原有ASP.NET MVC的路由逻辑,或者找不到对应的静态资源,所以没触发跳转。
下面给你几个最实用的解决方案,按优先级排序:
方法1:用URL重写模块(推荐,最灵活)
这是最稳妥的方式,能精准匹配所有Logon相关的URL,不管带不带GUID:
- 打开IIS管理器,找到你的
CustPortal站点(或对应的应用程序),点击右侧功能区的「URL重写」 - 点击右侧「添加规则」,选择「空白规则」:
- 匹配URL:
- 请求路径选「与模式匹配」
- 输入正则模式:
^CustPortal/Account/Logon(/.*)?$(这个规则会匹配Logon/、Logon/xxx-guid-xxx等所有变体) - 忽略大小写勾选上
- 操作:
- 操作类型选「重写」
- 重写URL填你的维护页路径,比如
/maintenance.html(要对应你维护页的实际文件名,确保这个文件在你设置的物理路径下) - 勾选「停止处理后续规则」,避免和原有路由冲突
- 匹配URL:
- 保存规则后,右键站点→「管理网站」→「重启」,然后测试带GUID的URL,应该就能正常跳转了
方法2:通配符映射+默认文档(适合没装URL重写的场景)
如果服务器没装URL重写模块,可以用这个方法让所有请求都指向维护页:
- 先把你的维护页设为默认文档:
- 进入站点的「默认文档」,点击「添加」,输入维护页的文件名(比如
maintenance.html),然后把它移到列表最顶部
- 进入站点的「默认文档」,点击「添加」,输入维护页的文件名(比如
- 添加通配符映射,强制所有请求走静态文件处理:
- 进入站点的「处理程序映射」,点击右侧「添加通配符脚本映射」:
- 请求路径填
* - 可执行文件选择静态文件处理程序的路径:
C:\Windows\System32\inetsrv\staticFile.dll - 名称随便取,比如「Maintenance Catch-All」
- 点击「确定」,在弹出的提示里选「是」允许这个映射
- 请求路径填
- 进入站点的「处理程序映射」,点击右侧「添加通配符脚本映射」:
- 同样重启站点,测试所有URL都会跳转到维护页
方法3:临时修改MVC路由(如果能重新部署代码)
如果你还能临时部署一个修改版的MVC项目,这个方法也很有效:
- 打开原项目的
App_Start/RouteConfig.cs,在所有路由规则最顶部添加一条优先匹配的规则:routes.MapRoute( name: "MaintenanceOverride", url: "CustPortal/Account/Logon/{*guid}", // 匹配所有Logon开头的路径,不管后面的GUID defaults: new { controller = "Maintenance", action = "Index" } ); - 新建一个
MaintenanceController,写一个Index方法返回维护页视图:public class MaintenanceController : Controller { public ActionResult Index() { return View(); // 对应的View就是你的维护页内容 } } - 编译部署这个临时版本,这样所有访问
Logon路径的请求,不管带不带GUID,都会被路由到维护页
注意事项
- 不管用哪种方法,配置后一定要重启IIS站点,否则配置不会生效
- 测试前记得清浏览器缓存,避免旧的路由缓存干扰结果
- 如果用URL重写模块,确认服务器已经安装(IIS管理器里能看到「URL重写」功能就说明装了,没装的话可以通过IIS的「Web平台安装程序」搜索安装)
内容的提问来源于stack exchange,提问作者ErocM
相关产品推荐
相关产品推荐

