我最近移动了主机,不得不再次在IIS中设置客户错误。
我可以按照以下方式访问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>
当我测试页面时,505错误正常,并重定向到右页,但404不重定向并返回标准IIS 404错误。我已确认服务器上的404错误页面位于正确的位置。
我看不出还有什么需要做的。
答案 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>
我已将所有这些细节放在这里,所以这有希望出现给其他人搜索我所做的相同事情 - 希望它有所帮助!