[英]Send http-404 response BUT dont send custom error page setted in IIS server | PHP
让我们了解场景:
:-在IIS 8.5上将PHP用于Web应用程序
:-使用以下Web配置片段为404设置了一个自定义错误页面:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/path/404.php" responseMode="ExecuteURL" />
</httpErrors>
:-这适用于不存在的页面,如果我在任何PHP页面中将header设置为404(通过header('HTTP/1.0 404 Not Found', true, 404); die;
),则IIS也会返回此404.php。
题:
现在,我希望在任何特定条件下在某些php文件中发送404 http响应代码,可以说数据库是否返回0行。 我可以通过如上所述设置标头来做到这一点,但这也会返回自定义错误页面。 有什么方法可以发送404代码并告诉IIS照原样发送响应,而无需发送自定义错误页面?
问题:
:-如果删除自定义错误页面并将内容放在header()
和die()
则它将满足我的要求,但是IIS将无法在实际上不存在的页面上提供自定义错误。
:-我正在使用URL重写,因此不能使用基于location
标记的多个自定义错误页面,并且不想重定向到任何建议的其他URL。
因为我有一个棘手的解决方案/想法,所以我也想分享一下。 但是,如果有人有更好的解决方案,我欢迎并感谢他们。
招/解决方案/理念:
步骤1:-从任何现有的php-page设置一个在
header('HTTP/1.0 404 Not Found', true, 404);
之前的session variable
header('HTTP/1.0 404 Not Found', true, 404);
并在该变量中放置一条特定的消息(我建议使用不同的整数代码作为不同php页面的会话变量的值)然后设置标头并调用die(); or exit;
die(); or exit;
。步骤2:-之后,IIS或任何其他服务器将执行自定义错误页面。 因此,在自定义错误页面中,检查会话变量并按如下所示回显内容。
........ 2a-如果未设置会话变量,则显示“ 带有主菜单的正常错误内容 ”等。
........ 2b-如果设置了会话变量,则检查该值,并根据该值显示要向用户显示的不同内容,例如:“ 未找到数据消息和搜索面板 ”
注意:在自定义错误页面的编码中,您再次需要设置404标头,此外,您还可以根据上述技巧中会话变量的值发送不同的错误代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.