Как обнаружить, что скрипт 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
:)