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

453*_*066 8 iis custom-errors

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

我可以按如下方式转到IIS Admin和Error Pages:

IIS上的自定义错误

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

客户错误设置

这将创建我的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>
Run Code Online (Sandbox Code Playgroud)

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

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

453*_*066 13

得到它最终工作(帮助找到这个: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>
Run Code Online (Sandbox Code Playgroud)


Mat*_*emp 6

我遇到类似的问题,即在/ Error / Missing处有一个自定义404页面,但没有显示不存在的静态文件或DID存在的文件夹/目录(但MVC不应该提供该页面) )。缺少页面控制器具有以下内容:

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

另外,如果我在控制器中返回了以下内容,则无法获得自定义错误页面:

return HttpNotFound();
Run Code Online (Sandbox Code Playgroud)

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

<httpErrors existingResponse="PassThrough" />
Run Code Online (Sandbox Code Playgroud)

将其更改为“替换”使默认IIS错误再次显示。

我在web.config中也有一节,但是由于是IIS 8.5,所以我已经删除了它,看起来不再需要它了。

<system.web>
    <customErrors mode="Off">
</system.web>
Run Code Online (Sandbox Code Playgroud)

因此,基本上我无法摆脱默认的IIS消息-单行或更详细的消息。我的httpErrors部分如下所示:

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)

最终,我遇到了这个问题,我在寻找关于这个问题的另一个答案,意识到我可以在每个错误行上尝试使用ResponseMode。我以为那是没有必要的,因为我设置了defaultResponseMode-但这有所作为!

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

<httpErrors errorMode="Custom">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)

我已经将所有这些详细信息放在这里,因此希望其他人在搜索与我所做的相同的事情时会看到它-希望对您有所帮助!