我正在尝试创建一个404错误页面,目前我已经拥有以下所有内容/尝试了以下所有内容来尝试完成此操作。当用户输入:
时它的工作方式正如它应该的那样。但如果用户键入:
没有.aspx然后IIS7自己动手,我得到了IIS7附带的可爱错误页面。目标是网站仅重定向404状态代码(因此不是200或302重定向)。我在web配置中尝试过:
<customErrors mode="On" defaultRedirect="~/error/Default.aspx redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/error/NotFound.aspx" />
</customErrors>
这适用于带有.aspx文件扩展名的网址,但不适用于没有扩展名的网址。与global.asax中的这种方法相同
void Application_Error(object sender, EventArgs e)
{
var serverError = Server.GetLastError() as HttpException;
if (serverError != null)
{
if (serverError.GetHttpCode() == 404)
{
Server.ClearError();
Server.Transfer("~/error/NotFound.aspx");
}
Server.Transfer("~/error/Default.aspx");
}
}
对此有相同的结果:(我最后的尝试是将此应用于网络配置:
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
有了这个我只得到一个没有任何东西的纯白色屏幕...... 任何想法或意见将不胜感激!!提前谢谢!
答案 0 :(得分:4)
以下代码适用于.aspx和其他文件类型:
Global.asax中
void Application_Error(object sender, EventArgs e)
{
var serverError = Server.GetLastError() as HttpException;
if (serverError != null)
{
if (serverError.GetHttpCode() == 404)
{
Server.ClearError();
Response.Redirect("~/NotFound.aspx?URL=" + Request.Url.ToString());
}
Response.Redirect("~/Default.aspx");
}
}
的Web.config
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
答案 1 :(得分:3)
您的应用程序似乎在经典管道模式下运行。将其更改为集成,您的问题将得到解决。这是一篇关于管道模式及其差异的文章 - http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-7-integrated-pipeline/
答案 2 :(得分:0)
对于经典的asp,你可以使用这个
<system.webServer>
<httpErrors>
<clear />
<error statusCode="404" subStatusCode="-1" path="/404.html" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
答案 3 :(得分:0)
<system.webServer >
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="http://www.seair.co.in/Page-not-found.aspx" responseMode="Redirect" />
</httpErrors>
</system.webServer>
使用配置中的代码并提供错误页面的完整路径