Как обнаружить, что скрипт PHP используется как ErrorDocument для 404 Not Found?

Допустим, у меня есть файл 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 пересылки или около того...

1 ответ

Решение

Одним из способов сделать это было бы просто посмотреть на $_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:)

Другие вопросы по тегам