具有URL重写的站点的自定义404重定向

时间:2010-09-01 15:26:05

标签: asp.net iis-7 url-rewriting http-status-code-404

在我的网站中,我使用IIS7的网址重写模块将http://mysite.com/File.aspx?Name=SomeName之类的网址重定向到http://mysite.com/SomeName

似乎IIS7已创建相应的规则检查,因此排序http://mysite.com/SomeURL的任何URL都会重定向到File.aspx。在大多数情况下,正确重写URL时,这很好。

问题是,在某些情况下,该文件不再存在 - http://mysite.com/SomeName2仍会被重定向到http://mysite.com/File.aspx?Name=SomeName2

我想为此URL显示自定义404错误页面 - 如何在global.asax中触发404错误(我在global.asax中设置了应用程序错误记录和处理)?以下代码不起作用。

Response.Status = "404 Not Found"
Response.AddHeader("Location", "http://mysite.com/Invalid-File.aspx?" & Request.QueryString.ToString)

它只显示丑陋的默认IIS 404错误页面。在web.config中添加customerror无济于事。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

设置状态代码时,您需要根据新的错误代码阻止IIS接管,请务必设置Response.TrySkipIisCustomErrors,如下所示:

Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.NotFound;
Response.AddHeader("Location", "http://mysite.com/Invalid-File.aspx?" & Request.QueryString.ToString)

答案 1 :(得分:1)

您是否尝试在IIS管理中设置404错误页面等于您在web.config中指定的内容?我想知道.net是不是在合适的时间进入管道。

答案 2 :(得分:0)

您可以使用Application_Error方法,然后使用正确的状态代码执行response.redirect到所需的页面