【问题标题】:IIS 7 Error CodesIIS 7 错误代码
【发布时间】:2011-07-09 11:29:49
【问题描述】:

我在 IIS 7 上运行 Sitefinity CMS 网站。当我尝试返回 404 状态时,我看到了一些奇怪的结果。

如果我访问如下网址:

www.mysitefinitywebsite.com/test.co.uk(我知道这是一个无效地址,但有人将它输入到 CMS 中)

由于上面不是 ASPX 页面,我相信 IIS 会处理错误,代码如下:

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

地址栏中的url保持不变,显示我的自定义404页面(/404.aspx)页面,但是返回http状态码200。

如果输入以下网址:

www.mysitefinitywebsite.com/test.aspx - ASPX 错误处理程序使用以下配置启动:

<customErrors mode="On" >
    <error redirect="~/Sitefinity/nopermissions.aspx" statusCode="403" />
    <error redirect="~/404.aspx" statusCode="404" />
</customErrors>

再次显示我的自定义 404 页面,但是地址栏中的 url 更改为:

www.mysitefinitywebsite.com/404.aspx?aspxerrorpath=/test.aspx

奇怪的是,如果我检查 Firebug,text.aspx 会返回 302 代码,然后 /404.aspx?aspxerrorpath=/test.aspx 会返回 200 的状态。

我不完全理解这里发生了什么,似乎 IIS 根本没有响应状态码 - 这是设计使然吗?看起来完全疯了!

如果是设计使然,大概解决它的唯一方法是以编程方式返回正确的响应代码?

提前致谢 喜气洋洋的

【问题讨论】:

    标签: asp.net iis-7 error-handling custom-error-pages


    【解决方案1】:

    当您使用&lt;httpErrors&gt; 元素和executeUrl 时,您正在提供动态内容。如果该内容没有明确返回状态代码(asp.net、asp 等页面),您需要将 existingResponse 属性设置为您认为合适的 auto/replace/passthrough。

    这里的意图是网络服务器可能会出现一般错误,您可能希望向您的客户端返回不同的或扩展的错误代码。这对于您可能希望 404 包含/返回有关未找到的内容等的更多信息的 API 更有意义。

    查看有关现有响应标志的 httpErrors 的 IIS.NET 文档

    http://www.iis.net/ConfigReference/system.webServer/httpErrors


    对于 ASP.NET,302 重定向错误是默认行为,这就是您所看到的。 404 返回 b/c 您要重定向到的页面正在以编程方式设置响应的状态代码。

    差异只是由处理引起的。首先,您允许 IIS 在执行 ASP.NET 管道之前处理错误。其次,IIS 传递给 ASP.NET 管道。他们是两种不同的技术,因此有两种不同的行为。请放心,只需进行一些研究,您就可以让它们都做同样的事情。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      相关资源
      最近更新 更多