IIS 8.5-返回静态 404 文件时出现错误

IIS 8.5-返回静态 404 文件时出现错误

IIS8.5 > 站点 > mysite > 错误页面 > 404

  • 选择“将静态文件的内容插入到错误响应中”。

  • 取消选中“尝试以客户端语言返回错误文件”。

  • 输入“notfound.html”的路径,我已验证它在那里。

当我访问一个我知道不存在的页面时,我得到:

The page cannot be displayed because an internal server error has occurred.

为什么我没有收到自定义的 404 文件?

我不认为这是一个权限问题,我尝试将“notfound.html”移动到几个地方,其中一个是实际站点 wwwroot 文件夹,它为站点的其余部分提供服务。

答案1

产生该错误的原因是在 中检测到了绝对路径web.config

文件的某个部分C:\path\to\notfound.html不允许使用绝对物理路径(如) 。system.webServer/httpErrorsweb.config

现在您有两个解决方案:


ApplicationHost.config1. 允许文件中的物理路径

默认情况下,此文件位于%SystemRoot%\system32\inetsrv\config

找到此文件并编辑它

搜索部分<httpErrors ..... >

然后添加指令allowAbsolutePathsWhenDelegated="true",如下所示:

<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath" allowAbsolutePathsWhenDelegated="true">
   ....
   ....
</httpErrors>

保存文件,就可以了!


2. 使用相对路径

相对路径意味着您必须将自定义错误页面存储在给定网站的根文件夹中。

然后,转到IIS > Sites > mysite > Error Pages > 404

并像这样设置您的自定义错误页面:

在此处输入图片描述

点击OK,就可以工作了!


编辑 :

但请注意:

  • 解决方案 1 发送404 Not Found响应
  • 解决方案 2 发送200 OK响应

答案2

我四处打探,发现有一个名为“allowAbsolutePathsWhenDelegated”的东西,默认情况下设置为“false”。

IIS8.5 > Sites > mysite > Management > Configuration Editor > system.webServer/httpErrors

但是该值被锁定,无法在那里编辑。所以我点击了树中的根,然后就可以在那里编辑它了。

IIS8.5 > Management > Configuration Editor > system.webServer/httpErrors

请注意,根目录实际上并非名为“IIS8.5”,而是以您的计算机名称命名。

因此,在将 allowAbsolutePathsWhenDelegated 设置为 true 后,一切都正常了。另一种解决方案是将静态文件放在我网站的 wwwroot 文件夹中,然后直接输入其名称作为 404 错误页面(尽管在我的情况下,最好使用绝对路径而不是相对路径)。

让我感到烦恼的是,“错误页面”屏幕上没有任何地方提到这个默认限制。它没有提到路径必须相对于您的站点根目录,而且由于默认路径不是相对路径(它位于 inetpub 文件夹中),因此您认为绝对路径可以正常工作。

希望微软能在后续版本中修复此界面问题。请更清楚地说明输入字段中的任何限制。

相关内容