如何检测 PHP 脚本被用作 404 Not Found 的 ErrorDocument?

How to detect PHP script is being used as ErrorDocument for 404 Not Found?

假设我有一个 test.php 文件,配置为使用 ErrorDocument 404 /test.php

处理 Apache 404 错误

我必须添加什么 PHP 代码来检查我们是否真的在处理 404,并且 test.php 没有被直接调用?

喜欢:

<?php
if (server_response_code == 404) {
    echo "It's a 404!"
}
?>

P.S。没有404转发等等……

一种方法是简单地查看 $_SERVER['REQUEST_URI'] 并确定它是否指向无效的内容。

虽然您的示例可能针对这个问题进行了简化,但它可能与

一样简单
if ($_SERVER['REQUEST_URI'] != 'test.php') {
    //we are handling a 404
    header("HTTP/1.0 404 Not Found");
    echo "These aren't the droids you're looking for";
}

您可能需要更复杂的逻辑,但归根结底就是查看请求并检测它是否无效。

只要 ErrorDocument 是相对的 URL(不以 http://.. 开头),那么您应该会发现您的脚本有一些额外的 $_SERVER 变量,例如

$_SERVER["REDIRECT_URL"]; // /original/path
$_SERVER['REDIRECT_STATUS']; // 404

有关详细信息,请参阅 ErrorDocument 文档。

或者,只需将查询字符串 arg 传递给 404 处理程序,例如ErrorDocument 404 /test.php?error=404:)