IIS 404自定义错误:URL返回响应代码200

6
我正在尝试使用IIS6返回自定义404页面(我的网站主要是使用movable type构建的.shtml页面)。我已经尝试了两种方法:
1)在IIS中将404错误处理程序设置为类型“文件”,路径为\404.html。这个方法可以工作,但它也意味着我无法导入我的站点的页眉和页脚(因此使用.shtml)。尝试将404错误处理程序指向404.shtml会导致默认的404页面...我猜IIS无法处理404中的shtml文件。
2)将类型设置为“URL”。这个方法很好用,但响应代码不再是404!而是200。
如何让IIS使用404.shtml文件内容并返回404响应代码?
2个回答

7
鉴于这是IIS,添加

<% Response.Status = "404 Not Found" %>

将404.shtml的页面顶部更改响应代码为404。

我目前不在windows机器上,无法测试并验证。

更新:

最终我能够在IIS 6上运行一些测试。正如您在我的帖子中的评论中提到的,.shtml文件不允许运行脚本命令。因此至少有两种方法可以解决这个问题:

  1. 将自定义的404页面命名为404.asp,而不是404.shtml。用户不应该看到页面的实际名称,因此这不应该引起任何问题。请注意,在IIS的Web服务扩展文件夹中,“Active Server Pages”必须设置为“允许”。

  2. 修改.shtml的页面扩展映射,使用asp.dll而不是ssinc.dll。您可以通过选择网站并查看属性->主目录选项卡->配置->映射选项卡来在IIS上执行此操作。请注意,这远非理想的解决方案,因为现在所有您的.shtml文件都将由asp.dll处理。这可能会导致您的页面渲染更慢(假设asp.dll由于更复杂而处理文件更慢),并违反最小特权原则

如果以上两个选项都无法解决您的问题,则仍然有可能找到解决方案,但我目前还没有想到。


呃,我之前认为在IIS的shtml文件中你只能使用include和exec。我会在周一尝试一下,谢谢。 - Joel
当我发出建议时,我也在想这个问题,但我认为至少值得一提。希望它能起作用。 - lostriebo
谢谢,我选择使用URL /404.asp的方法。这个方法效果还不错。再次感谢! - Joel
我正在运行 Coldfusion。我在其他地方读到,应该能够返回 cfm 页面(而不是 html/asp),但当我尝试运行 cfm 页面时,连接被重置了。这种方法对我有用,但我希望能够在我的页面中访问 CF 内容。任何想法为什么使用 404 的 URL 方法会导致连接被重置? - Leeish

0
在IIS管理器中,打开您的网站(或虚拟目录)的属性,然后转到自定义错误选项卡。在那里,您可以设置每个错误代码的情况下发送哪个文件,包括404错误。

哎呀,现在我明白你的第一点了,抱歉。 直觉上,我认为错误页面不能是动态的。 - Timores

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接