Kentico/ASP.NET ResponseRedirect后404跳转URL未变更问题排查
解决ASP.NET 404跳转后URL不更新的问题
嗨,我看你已经配置了<customErrors>,但遇到了URL没跳转的问题——这其实是ASP.NET和IIS错误处理优先级的小坑,咱们来搞定它:
先看你当前的配置代码:
<customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="~/SpecialPages/PageNotFound.aspx"> <error statusCode="404" redirect="~/SpecialPages/PageNotFound.aspx" responseMode="Redirect"/> </customErrors>
你设置的redirectMode="ResponseRedirect"和responseMode="Redirect"理论上应该触发URL跳转,但问题大概率出在IIS的原生错误处理优先级更高,把ASP.NET的customErrors给覆盖了。咱们做两个关键调整:
1. 让ASP.NET接管错误响应
在web.config的<system.webServer>节点里加上这段配置,告诉IIS不要用自己的错误页覆盖ASP.NET的处理结果:
<system.webServer> <httpErrors existingResponse="PassThrough" /> </system.webServer>
这个配置的作用是让IIS“放行”ASP.NET已经处理好的错误响应,而不是强行替换成IIS自带的404页面。
2. 检查IIS管理器的错误页设置
如果加了上面的配置还是没效果,去IIS里手动确认一下:
- 打开你的站点,找到“错误页”功能
- 找到404状态码对应的条目,双击进去
- 把“响应类型”改成重定向,目标URL填写
/SpecialPages/PageNotFound.aspx(注意这里用根路径,不要带~) - 保存设置后重启站点试试
另外还要注意两个小细节:
- 确认
~/SpecialPages/PageNotFound.aspx这个路径完全正确,没有拼写错误,而且直接访问这个地址能正常打开 - 如果你的站点是部署在IIS 7.5及以上版本,这个方案应该100%生效
现在再测试访问mysite.com/gibberish,应该就能看到URL跳转到mysite.com/SpecialPages/PageNotFound.aspx,同时显示你的自定义404页面啦!
内容的提问来源于stack exchange,提问作者rory
相关产品推荐
相关产品推荐

