Вместо перенаправления вы можете просто отобразить ошибку «на месте» - например, что-то такое простое, как адаптация вашего нынешнего кода с чем-то вроде
if ($error_condition)
{
$_GET['n']=11;
include "/path/to/error.php";
exit;
}
На практике это может быть немного сложнее, но идея та же - пользователю выдается сообщение об ошибке без перенаправления. Убедитесь, что вы выводите какой-то заголовок ошибки, например заголовок («HTTP / 1.0 401 Bad Request»), чтобы сообщить браузеру, что он не видит запрошенную страницу.
Если вы хотите перенаправить, вы можете создать защищенный от несанкционированного доступа URL-адрес, включив в него хэш номера ошибки с солью, известной только вашему коду, например
$n=11;
$secret="foobar";
$hash=md5($n.$secret);
$url="http://{$_SERVER['HTTP_HOST']}/error.php?n={$n}&hash={$hash}";
Теперь ваш error.php может проверить, правильно ли был создан предоставленный хэш. Если это так, то, по всей вероятности, он был создан вашим кодом, а не пользователем.