首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义404错误未正确重定向

自定义404错误未正确重定向
EN

Stack Overflow用户
提问于 2010-09-27 19:33:46
回答 1查看 4.1K关注 0票数 1

在我的web.config文件中有这个自定义的错误重定向,但是自从我添加了redirectMode="ResponseRewrite"之后,它似乎不工作了。

它可以很好地处理500个错误,但不能处理404 (当我有一个404时,它就不能重定向了)

下面是来自web.config的代码

代码语言:javascript
复制
<customErrors mode="On" redirectMode="ResponseRewrite"> 
   <error statusCode="404" redirect="/servererror/default.aspx" /> 
   <error statusCode="500" redirect="/servererror/default.aspx" /> 
</customErrors>

下面是我的servererror/default.aspx代码

代码语言:javascript
复制
Dim err As System.Exception = Server.GetLastError()

Dim Errormail = New MailMessage

     'Send email to Bondholder using email address from form
     Errormail.To           = "email@email.co.uk"

     Errormail.From         = "servererror@email.co.uk"
     Errormail.Subject      = "Server Error Alert"
     Errormail.BodyFormat   = MailFormat.Text
     Errormail.Priority     = MailPriority.Normal
     Errormail.Body         = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString())

     SmtpMail.SmtpServer    = "localhost"

     SmtpMail.Send(Errormail)

我需要保留redirectMode="ResponseRewrite",以便servererror/default.aspx在出现错误时向我发送电子邮件

任何帮助都将不胜感激

谢谢

杰米

更新

我在网上浏览了一下,发现很多人都有同样的问题,但我找不到一个明确的答案。

有什么想法吗?

谢谢

杰米

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-27 22:41:17

我假设您在找不到页面时看到的是通用.NET?

解决方案如下所示。请注意,路径中添加了~:

代码语言:javascript
复制
    <customErrors mode="On" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/servererror/default.aspx"/>
        <error statusCode="500" redirect="~/servererror/default.aspx"/>
    </customErrors>

更新:

虽然您的解决方案有效,但它有点老套--特别是您使用会话状态的方式在大型应用程序或其他经验丰富的开发人员中是不受欢迎的。我建议将500和404错误分到不同的页面上。

如果您的网站可通过web访问,则向实际用户显示不同的错误消息是很有用的,例如,如果他们正在寻找的页面已经消失(404)或存在一些临时问题(500),那么稍后再检查可能是一个好主意。每一页的错误文本都应该相应地反映这一点。向搜索引擎报告适当的状态代码也很重要,以指示页面是否不再可用,即该页面是否已从项目中删除并应从搜索引擎索引中删除,或者是否存在错误,搜索引擎应稍后返回以爬取该页面,而不是从索引中删除。没有正确地报告这些状态代码可能会影响您的web应用程序通过搜索引擎的性能。通常,我的web.config如下所示:

代码语言:javascript
复制
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
    <error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>

注意:由于最近在.NET框架中发现了一个安全漏洞,因此设置"defaultRedirect“属性非常重要(请咨询谷歌)。设置这是一种填补漏洞的变通方法。

要向客户端(和搜索引擎机器人)报告正确的HTTP状态代码,您可以使用以下代码。只需将它们放在相关页面的页面加载事件中:

对于500个错误:

代码语言:javascript
复制
Response.Status = "500 Internal Server Error"

对于404错误:

代码语言:javascript
复制
Response.Status = "404 Not Found"

现在,您可以从Global.asax中删除代码,并为您的错误电子邮件逻辑创建一个可从每个页面调用的共享函数。如果你愿意,你可以将上面的代码合并到你现有的错误页面中,但是我总是喜欢把它们分开,因为我发现它更整洁。

如果您想测试页面的HTTP状态代码,我建议您查看一个名为Fiddler的免费应用程序

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3803383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档