由于你们中的一些人正在运行一些相当大的网站,我想得到你对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可以接收错误?
如果我能够深入了解其他人正确处理这种情况所使用的设置,那就太棒了.
谢谢
您可以使用动态页面来设置正确的状态代码,而不是使用静态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>
Run Code Online (Sandbox Code Playgroud)
web.config中:
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="404.aspx" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |