由于你们中的一些人正在运行一些非常大的网站,我想得到你对404的处理意见。我已经尝试过.Net的大量不同设置,但实际上却无法让它做正确的事情。我似乎总是得到某种重定向或错误的标题返回,从来没有404.这是一个真正的痛苦,因为搜索引擎永远不会得到正确的反馈,并仍然打击这些页面,尽管它们不再存在。反过来,这意味着我报告了我知道不再存在的页面的错误。我也对.Net处理某些请求的方式感到困惑,其中一些是由IIS处理的。
我目前的设置如下:IIS7,ASP.Net 3.5 App。我有web.config设置的自定义错误页面部分,使用新的redirectMode =“ResponseRewrite”属性处理404,转发到html错误页面。 IIS配置为处理404并将它们转发到同一个html页面。 Elmah也被配置为通过电子邮件报告任何此类问题。
现在,当我尝试以下地址http://www.severnside.com/document.aspx(一个不存在的页面)时,.net处理错误并显示200响应。显然这应该是404.当我尝试http://www.severnside.com/document时,我得到了正确的404,但错误是由IIS处理的。是否有可能让.Net处理此错误,以便Elmah可以收到错误?
如果我能够深入了解其他人正确处理这种情况所使用的设置,那就太棒了。
由于
答案 0 :(得分:8)
您可以使用动态页面来设置正确的状态代码,而不是使用静态html页面:
404.aspx:
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.StatusCode = 404;
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
Not found
</div>
</form>
</body>
的web.config:
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="404.aspx" />
</customErrors>