使用IIS 7 URL重写模块时自定义404页面
问题描述:
我几乎完成了对现有网站进行重大改写和重新设计/重组,以获得大量流量。我一直在使用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状态代码?
谢谢!
答
,让我们的自定义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>
其实,我觉得我碰到了同样的问题,在这里我只指定一个错误类型。这可能不适用于无延展 - 但希望它能让你走上正轨。
答
这为我工作,在代码中404.aspx的背后:
protected void Page_Load(object sender, EventArgs e)
{
this.Response.StatusCode = 404;
this.Response.StatusDescription = "Not Found";
this.Response.TrySkipIisCustomErrors = true;
}
感谢您的答复。我已经尝试了一些类似于您所建议的内容并重新访问的内容。我可能会错过一些东西,但即使这些东西都设置了,我仍然看到一个200而不是404。也许这是整个无延伸的东西,正如你所说的 - 不确定。我终于实现了一个解决方法,并且在404 ASPX页面的Page_Init事件中明确地将响应状态代码设置为404。它感觉很不舒服,但我现在就拿它来。如果其他人有更优雅的解决方案,请告诉我。谢谢! – drewta 2011-05-02 05:22:12
@drewta,可能有一些IIS设置指定IIS在没有扩展名时将所有流量发送到ASP.NET运行时。例如,我必须指定所有CFM(旧网站是一个冷聚变网站)应该去ASP.NET,所以我的自定义404处理程序可以处理它。由于时间的限制,我花了大约10分钟的时间试图在我放弃之前得到无限延伸。祝你好运。 – 2011-05-02 06:02:56
当抛出异常时,此设置将更改当前的URL – xiaoyifang 2014-03-07 04:54:54