URL编码路径触发IIS 404.11错误,为何判定为双重转义?
为什么IIS会将该URL判定为双重转义并返回404.11错误?
IIS默认的请求过滤模块会将路径段中包含编码后的路径分隔符或特殊元字符的请求判定为“双重转义”并拦截,返回404.11错误——这是IIS的安全防护机制,用来防止攻击者通过编码特殊字符绕过路径解析规则。
具体到你的URL,路由最后一段里的两个关键编码字符触发了拦截:
%2F:这是URL编码后的路径分隔符/。正常情况下,/用来分割URL的不同路径段,而你将它编码后放在单个路径段中,IIS会认为这是试图在一个路径段中注入路径分隔符的可疑操作,属于典型的双重转义场景。%2B:这是URL编码后的+字符。虽然+在查询字符串中常用来表示空格,但在路径段中,IIS默认会将编码后的+视为异常的双重转义行为,尤其是和%2F同时出现时,会进一步触发拦截。
另外需要注意,WebUtility.UrlEncode是通用的URL编码工具,它不会区分URL的路径段和查询字符串部分。对于路由路径段来说,本来就应该避免包含编码后的路径分隔符(%2F),因为这会和IIS的路径解析逻辑冲突。你提到的在web.config中添加allowDoubleEscaping="true"的配置,本质是告诉IIS允许这种编码后的特殊字符出现在路径段中,不再判定为双重转义,所以能解决问题。
内容的提问来源于stack exchange,提问作者Stephen Angell
相关产品推荐
相关产品推荐

