【问题标题】:Send http-404 response BUT dont send custom error page setted in IIS server | PHP发送 http-404 响应但不要在 IIS 服务器中发送自定义错误页面设置 | PHP
【发布时间】:2015-06-13 12:15:12
【问题描述】:

让我们了解一下场景:

:- 在 IIS 8.5 上将 PHP 用于 Web 应用程序

:- 为 404 设置了自定义错误页面,并带有以下 web-config 片段:

<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 将无法在实际上不存在的页面上提供自定义错误。

:- 我正在使用 URL 重写,因此不能使用基于 location 标记的多个自定义错误页面,并且不想重定向到任何建议的不同 URL。

【问题讨论】:

    标签: php iis custom-error-pages


    【解决方案1】:

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

    技巧/解决方案/想法:

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

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

    ........2a - 如果会话变量未设置,则显示“带有主菜单的正常错误内容”等。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多