0

假设我有一个 test.php 文件,配置为处理 Apache 404 错误ErrorDocument 404 /test.php

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

喜欢:

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

PS 没有 404 转发左右……</p>

4

1 回答 1

0

一种方法是简单地查看$_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:)

于 2017-01-28T09:25:44.567 回答