IIS 8.5 – 返回静态404文件时出错

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

当我访问一个页面,我知道不在那里我得到:

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

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

我不认为这是一个许可的事情,我试着将“notfound.html”移动到几个地方,其中之一是实际网站wwwroot文件夹,服务于其余的网站。

生成此错误是因为在web.config检测到绝对path。

web.config文件中的system.webServer/httpErrors部分不允许绝对物理path(如C:\path\to\notfound.html )。

现在你有两个解决scheme:


1.在ApplicationHost.config文件中允许物理path

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

find这个文件并编辑它

search<httpErrors ..... >

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

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

保存文件,应该工作!


2.使用相对path

相对path意味着您将不得不将自定义错误页面存储在给定网站的根文件夹中。

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

并设置您的自定义错误页面,如下所示:

在这里输入图像说明

点击OK ,应该工作!


编辑:

但是请注意:

  • 解决scheme1发送一个404 Not Found响应
  • 解决scheme2发送200 OK响应

我窥探了一下,发现有一个名为“allowAbsolutePathsWhenDelegated”的东西默认设置为“false”。

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

但是,该值被locking,不能在那里编辑。 所以我点击了树中的根,并可以在那里编辑它。

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

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

所以在allowAbsolutePathsWhenDelegated设置为true后,一切正常。 一个不同的解决scheme是将静态文件放在我的网站的wwwroot文件夹中,只需input它的名称作为404错误页面(虽然在我的情况下,它是绝对path,而不是相对较好)。

有什么错误的是,在“错误页面”屏幕上的任何地方都没有提到这个默认限制。 它没有说任何有关path必须相对于您的网站根,并且由于默认不是相对的(它在inetpub文件夹中),您认为绝对path可以正常工作。

希望微软将在以后的版本中解决这个接口问题。 请input字段中的任何限制。