我几乎已经完成了对现有网站进行重大改写和重新设计/重组,从而获得了大量流量。我一直在使用IIS 7 Url重写模块来启用无扩展和SEO友好的URL,以及将旧页面的请求重定向到新站点结构中的适当页面。它一直很顺利,但我正在研究如何设置自定义404页面并受到阻碍。到目前为止,我已经在web.config的节点中设置了以下代码:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.htm" responseMode="ExecuteURL" />
</httpErrors>
事情是,它起作用,但并不完全!如果我转到一个不存在的URL,我确实得到了我的自定义404页面,但请求获得200 OK状态代码作为响应而不是所需的404.我已经摆弄了httpErrors节点的各种属性但没有运气。有谁知道如何显示自定义404页面并返回实际的404状态代码?
谢谢!
答案 0 :(得分:3)
要使我们的自定义404处理程序正常工作,我们必须执行以下操作:
<customErrors defaultRedirect="ErrorPage.aspx" mode="On">
<error statusCode="500" redirect="ErrorPage.aspx" />
<error statusCode="404" redirect="/404.aspx" />
<error statusCode="403" redirect="ErrorPage.aspx" />
</customErrors>
和
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
我实际上认为我遇到了同样的问题,我只指定了一种类型的错误。这可能不适用于无扩展 - 但希望它能让你走上正确的轨道。
答案 1 :(得分:1)
这对我有用,在404.aspx:
的代码中 protected void Page_Load(object sender, EventArgs e)
{
this.Response.StatusCode = 404;
this.Response.StatusDescription = "Not Found";
this.Response.TrySkipIisCustomErrors = true;
}