2011-04-30 122 views
6

我几乎完成了对现有网站进行重大改写和重新设计/重组,以获得大量流量。我一直在使用IIS 7 URL重写模块来启用无扩展和搜索引擎友好的网址,并将旧页面的请求重定向到新网站结构中的相应页面。它进展顺利,但我正在研究如何设置自定义404页面并阻碍它。到目前为止,我已经设置了下面的代码在web.config中的节点:使用IIS 7 URL重写模块时自定义404页面

<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状态代码?

谢谢!

回答

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> 

其实,我觉得我碰到了同样的问题,在这里我只指定一个错误类型。这可能不适用于无延展 - 但希望它能让你走上正轨。

+0

感谢您的答复。我已经尝试了一些类似于您所建议的内容并重新访问的内容。我可能会错过一些东西,但即使这些东西都设置了,我仍然看到一个200而不是404。也许这是整个无延伸的东西,正如你所说的 - 不确定。我终于实现了一个解决方法,并且在404 ASPX页面的Page_Init事件中明确地将响应状态代码设置为404。它感觉很不舒服,但我现在就拿它来。如果其他人有更优雅的解决方案,请告诉我。谢谢! – drewta 2011-05-02 05:22:12

+0

@drewta,可能有一些IIS设置指定IIS在没有扩展名时将所有流量发送到ASP.NET运行时。例如,我必须指定所有CFM(旧网站是一个冷聚变网站)应该去ASP.NET,所以我的自定义404处理程序可以处理它。由于时间的限制,我花了大约10分钟的时间试图在我放弃之前得到无限延伸。祝你好运。 – 2011-05-02 06:02:56

+0

当抛出异常时,此设置将更改当前的URL – xiaoyifang 2014-03-07 04:54:54

1

这为我工作,在代码中404.aspx的背后:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.Response.StatusCode = 404; 
     this.Response.StatusDescription = "Not Found"; 
     this.Response.TrySkipIisCustomErrors = true; 
    }