Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
IIS 404自定义错误:URL返回响应代码200而不是 - 源码之家

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

问题描述:

我试图使用IIS6返回自定义404页面。 (我有一个网站,主要是使用移动类型构建的.shtml页面)。我试过2种方法:IIS 404自定义错误:URL返回响应代码200而不是

1)在IIS中设置404错误处理程序,输入“file”,路径为\ 404.html。这工作,但它也意味着我不能导入我的网站的页眉和页脚(因此.shtml)尝试将404错误处理程序指向默认404页面中的404.shtml结果...我想IIS可以不处理404中的shtml文件。

2)将类型设置为“URL”。这很好,除了响应代码不再是404!它是一个200.

我怎样才能让IIS响应404响应代码与我的404.shtml文件的内容?

鉴于它的IIS,添加

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

到404.shtml的顶部应响应代码更改为404

我不是在Windows机器上,所以我无法测试此刻进行验证。

更新:

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

  1. 而不是命名您的自定义404处理页面404.shtml,将其命名为404.asp。用户不应该看到页面的实际名称,所以不应该引起任何问题。请注意,必须在IIS的Web Service Extensions文件夹中将“Active Server Pages”设置为“Allowed”。

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

如果这两个选项都不符合您的情况,那么它仍然可能,但解决方案对我而言并不是显而易见的。

+0

嗯,我认为你所能做的所有在IIS中的shtml文件是包括和执行。我会在星期一尝试这个,谢谢 – Joel 2010-02-28 15:06:56

+0

当我发布这个建议时,我也想知道,但我认为这至少值得一提。希望它会起作用。 – lostriebo 2010-02-28 23:13:12

+0

谢谢,我去了使用URL /404.asp的路线。这工作相当好。再次感谢! – Joel 2010-03-19 20:51:31

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

+0

谢谢,这是我正在尝试。 – Joel 2010-02-28 15:07:12

+0

哎呀,现在我明白了你的观点Nr 1,对不起。直觉上,我并不认为那个错误页面可以是动态的。 – Timores 2010-02-28 17:50:09