Допустим, у меня есть файл test.php, настроенный для обработки ошибок Apache 404 с ErrorDocument 404 /test.php
Какой код PHP мне нужно добавить, чтобы проверить, действительно ли мы обрабатываем 404, и test.php не был вызван напрямую?
Подобно:
<?php
if (server_response_code == 404) {
echo "It's a 404!"}
?>
Постскриптум Там нет 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
🙂
Других решений пока нет …