ErrorDocument 400 перенаправляет на другой URL без перезаписи - PullRequest
0 голосов
/ 01 августа 2020

Я хочу реализовать настраиваемую страницу ошибки 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 без повторения ошибка? Если нет, есть ли способ использовать переменные директивы при перенаправлении во внешнее расположение?

...