Web.config中httpErrors默认路径用相对路径时出现文件未找到问题
解决IIS web.config自定义错误页面相对路径"文件未找到"问题
我之前也碰到过这个问题——你配置500错误页的逻辑是对的,但defaultPath用相对路径时,IIS的路径解析规则和你预期的不太一样,导致找不到404.html。下面给你几个实用的解决办法:
方案1:改用站点根目录绝对路径(最推荐)
IIS处理defaultPath时,相对路径会根据当前请求的URL层级来解析,比如如果用户访问/subpage/nonexist,相对路径会指向/subpage/404.html,自然就找不到了。换成以/开头的绝对路径,就能强制IIS从站点根目录找文件:
<system.webServer> <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="/404.html"> <remove statusCode="500"/> <error statusCode="500" path="/500.html" responseMode="File"/> </httpErrors> </system.webServer>
方案2:指定完整物理路径
如果你的应用部署在固定的物理位置,直接写全路径也能解决问题,比如:
<system.webServer> <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="C:\inetpub\wwwroot\your-application\404.html"> <remove statusCode="500"/> <error statusCode="500" path="C:\inetpub\wwwroot\your-application\500.html" responseMode="File"/> </httpErrors> </system.webServer>
不过这个方法的缺点是部署路径变了就得改配置,不如绝对路径灵活。
方案3:排查虚拟目录和权限问题
如果坚持要用相对路径,得确认两个点:
- 打开IIS管理器,检查你的应用程序根目录是不是正好指向存放404.html、500.html的文件夹
- 检查应用程序池的运行身份有没有读取这两个HTML文件的权限——有时候权限不足也会伪装成"文件未找到"的错误,别忽略这个点
最后记得配置完重启一下IIS站点,让新配置生效。
内容的提问来源于stack exchange,提问作者Sam Alekseev
相关产品推荐
相关产品推荐

