自定义404错误页面无法在IIS 8.5上运行

时间:2015-07-05 06:55:14

标签: iis custom-errors

我最近移动了主机,不得不再次在IIS中设置客户错误。

我可以按照以下方式访问IIS管理员和错误页面:

Custom Errors on IIS

然后我可以转到自定义错误,并按如下方式设置选项:

Customer Errors setup

这将创建我的web.config文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

当我测试页面时,505错误正常,并重定向到右页,但404不重定向并返回标准IIS 404错误。我已确认服务器上的404错误页面位于正确的位置。

我看不出还有什么需要做的。

2 个答案:

答案 0 :(得分:12)

最终得到了它(通过查找:http://forums.iis.net/t/1173965.aspx),使用:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

答案 1 :(得分:5)

我遇到了类似的问题,我在/错误/丢失时有一个自定义404页面,但它没有显示不存在的静态文件或存在DID的文件夹/目录(但是不应该由MVC服务)。缺失页面的控制器具有以下内容:

    Response.AddHeader("Content-Type","text/html; charset=utf-8");
    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = (int)HttpStatusCode.NotFound; // 404

如果我在控制器中返回以下内容,我也无法获取自定义错误页面:

return HttpNotFound();

如果我设置PassThrough,我可以将IIS默认错误更改为空白页:

<httpErrors existingResponse="PassThrough" />

将其更改为&#34;替换&#34;使默认的IIS错误再次显示。

我的web.config中也有一个部分,但是我已经把它拿出来,因为我在IIS 8.5中看起来不再需要它。

<system.web>
    <customErrors mode="Off">
</system.web>

所以基本上我无法摆脱默认的IIS消息 - 无论是单行还是更详细的消息。我的httpErrors部分看起来像这样:

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" />
</httpErrors>

最后我遇到了这个问题,我正在查看关于这个问题的另一个答案,并意识到我可以在每个错误行上尝试一个ResponseMode。我认为没有必要,因为我设置了defaultResponseMode - 但它有所不同!!

因此,如果您想要提供自定义404页面,请使用此httpErrors模块:

<httpErrors errorMode="Custom">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" responseMode="ExecuteURL" />
</httpErrors>

我已将所有这些细节放在这里,所以这有希望出现给其他人搜索我所做的相同事情 - 希望它有所帮助!