让我们理解这个场景:
: - 在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
标记的多个自定义错误页面,也不希望重定向到任何建议的不同网址。
答案 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标头,并且您还可以根据上述技巧中的会话变量值发送不同的错误代码。