Я хочу реализовать настраиваемую страницу ошибки 400 на моем Apache сервере в файл с именем 400.php
.
Первое, что я попробовал, это просто поместить ErrorDocument 400 400.php
в свой .htaccess
файл. Это не работает, потому что для таких ошибок, как 400, они не могут быть обработаны файлом .htaccess
и вместо этого должны быть помещены в файл httpd.conf
, как упоминалось здесь .
Это работает в смысле признания Apache, но все еще не работает полностью. По-прежнему отображается сообщение по умолчанию, но на этот раз оно добавлено внизу: Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.
Это потому, что ErrorDocument
не перенаправляет, а просто перезаписывает URL-адрес, а теперь пытается показать 400.php
. Но поскольку это всего лишь перезапись, Apache по-прежнему считает, что запрошенный документ был тем же документом, который изначально вызвал ошибку, поэтому он снова приводит к ошибке 400.
Самое дальнее, что мне удалось получить, это вместо этого скажите ErrorDocument 400 https://example.com/400.php
. Это работает, потому что Apache не может повторно перезаписать URL-адрес (поскольку он является внешним) и вынужден выполнять перенаправление. Однако для меня это не сработает, так как мне нужно знать исходный URL-адрес, который вызвал ошибку. Я попытался получить $_SERVER["HTTP_REFERER"]
из PHP, но он пуст.
Директива ErrorDocument
имеет доступ к некоторым переменным , например REDIRECT_URL
, но они устанавливаются только в том случае, если цель является внутренним, поэтому в данном случае он не сработает.
Есть ли возможность использовать ErrorDocument
, но с правильным перенаправлением, чтобы его можно было обработать скриптом PHP без повторения ошибка? Если нет, есть ли способ использовать переменные директивы при перенаправлении во внешнее расположение?