发送http-404响应但不发送在IIS服务器中设置的自定义错误页面PHP

时间:2015-06-13 12:15:13

标签: php iis custom-error-pages

让我们理解这个场景:

: - 在IIS 8.5上使用PHP作为Web应用程序

: - 自定义错误页面设置为404,其中包含以下web-config snippt:

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" path="/path/404.php" responseMode="ExecuteURL" />
</httpErrors>

: - 如果我在任何PHP页面中将标头设置为404(通过header('HTTP/1.0 404 Not Found', true, 404); die;),这适用于不存在的页面,IIS也返回此404.php。

问题:

现在,我想在任何特定情况下在某些php文件中发送404 http响应代码,假设数据库返回0行。我可以通过设置标题如上所述,但也会返回自定义错误页面。 有没有办法发送404代码并告诉IIS按原样发送响应,而不发送自定义错误页面?

的问题:

: - 如果我删除自定义错误页面并将内容放在header()die()之间,那么它将符合我的要求,但IIS将无法在实际不存在的页面上提供自定义错误。

: - 我正在使用网址重写,因此无法使用基于location标记的多个自定义错误页面,也不希望重定向到任何建议的不同网址。

1 个答案:

答案 0 :(得分:0)

由于我有一个棘手的解决方案/想法,我也想分享它。但如果有人有更好的解决方案,我欢迎并感谢他们。

<强>招/解决方案/点子:

  

第1步: - session variable之前的任何现有php页面设置header('HTTP/1.0 404 Not Found', true, 404);并在该变量中放置一条特定的消息(我建议使用不同的整数代码)作为会话变量的不同php页面的值)然后设置标题并调用die(); or exit;

     

第2步: - 之后,IIS或任何其他服务器将执行自定义错误页面。因此,在自定义错误页面中检查会话变量和回显内容,如下所示....

     

........ 2a - 如果未设置会话变量,则在主菜单中显示&#34; 正常错误内容&#34;等

     

........ 2b - 如果设置了会话变量,则检查该值并根据值显示您要向用户显示的不同内容,如:&#34; 数据未找到消息和搜索面板&#34;

注意:在自定义错误页面的编码中,您再次需要设置404标头,并且您还可以根据上述技巧中的会话变量值发送不同的错误代码。