我在 IIS 7 上运行 Sitefinity CMS 网站。当我尝试返回 404 状态时,我看到了一些奇怪的结果。
如果我访问如下 URL:
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 根本没有响应状态代码 - 这是设计使然吗?似乎完全疯了!
如果是设计使然,大概解决它的唯一方法是以编程方式返回正确的响应代码?
在此先感谢希格斯