繁体   English   中英

IIS7 404错误

[英]IIS7 404 errors

我有一个在IIS 7中运行的ASP.NET 3.5站点
我试图让404第一次抛出404状态代码。

目前,如果您输入

http://www.madeupsiteforexample.com/somethingmadeup

你收到302跟随200。
我试图让这个第一次抛出404代码并显示我已设置的404页面(/FileNotFound.aspx)

我遇到的问题是404页面显示200代码,或者当IIS看到404状态代码并显示其自己的可怕404页面而不是我自定义创建的页面时,IIS接管。

我已经尝试使用模块,global.asax并在我的404页面后面的代码上设置状态代码。 所有这些都导致IIS接管。

这是我的Global.asax实现

protected void Application_Error(object sender, EventArgs e)
{
    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = 404;
}

现在我确实通过Server.Transferring我的请求解决了这个问题。
但是,这会导致所有会话都为null,并且引用Session的任何代码都会导致异常。 此外,尝试从资源文件中检索项目的代码会导致异常。

关于在IIS7中做404的“正确方法”的任何建议或文章?

我也被困在iis 7上了......你可以尝试这个,因为它对我有用...

<httpErrors existingResponse="PassThrough" />

这个人也和你有同样的问题。 IIS7在设置Response.StatusCode时覆盖customErrors?

这是对正在发生的事情的忏悔http://www.fidelitydesign.net/?p=21

看一下本教程 ,通过配置而不是代码设置自定义错误页面是正常的。

您可以通过修改“默认网站”(或特定于您的应用程序)下的“错误页面”设置来更改在404显示的页面

如果希望Session仍然可用,请使用Server.TransferRequest(IIS6中不支持)而不是Server.Transfer。

但我首选的方法是调用Response.StatusCode = 404; FileNotFound.aspx并将web.config设置为:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1"/>
    <error statusCode="404" prefixLanguageFilePath="" path="/FileNotFound.aspx" responseMode="ExecuteURL"/>
  </httpErrors>
</system.webServer>

对于其他人,如果你像我一样只是在主页上显示404错误的顶部显示消息,你可以测试它是否是404请求,因为内部新请求的状态代码附加到网址即ie

if (Request.Url.ToString().Contains("?404;"))
{
    Response.StatusCode = 404;
    Util.DisplayMessage("The page you are looking for no longer exists. If you navigated to this page by clicking a link within this site please <a href='" + ResolveUrl("~/contact.aspx") + "'>contact us</a> to let us know.");
}

如果它们相对于FileNotFound.aspx (即不是站点根'/ path'或在服务器'〜/ path'解析),那么图像,脚本等的路径也可能是错误的,并且缺少的页面(即当前URL)是另一个文件夹。 要修复我告诉浏览器将基本标记的FileNotFound.aspx所在的相对路径作为基础,并告诉服务器与Context.RewritePath匹配即

Page.Header.Controls.AddAt(0, new LiteralControl("<base href='" + Request.Url.Scheme + "://" + Request.Url.Authority + VirtualPathUtility.ToAbsolute("~/") + "'/>"));
Context.RewritePath("~/");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM