Что касается Apache, он выполнил свою работу, поскольку он правильно нашел страницу / скрипт, к которому обращался пользовательский запрос.Тот факт, что скрипт выводит заголовок 404, не имеет никакого значения для Apache, поскольку его работа была выполнена правильно.
Вам необходимо, чтобы ваш PHP-скрипт выводил заголовок 404 и включал страницу обработчика Apache 404указывает на это:
if (!$_GET['page']) {
header('HTTP/1.0 404 Not Found');
include('404.html');
exit();
}
Не делайте перенаправления на страницу 404, так как это просто превратит попадание в обычный запрос GET с результатом 200 OK.