Настраивая всевозможные редиректы многие сталкиваются со странной особенностью Apache — сервер плевать хотел на ваши директивы AddDefaultCharset, AddCharset установленные в UTF-8 и на редиректах 301/302 упорно возвращает Content-Type: text/html; charset=iso-8859-1 вместо ожидаемого utf-8.
Вот что сказано по этому случаю в документации Apache:
Когда Apache выдает перенаправление в ответ на запрос клиента, ответ включает в себя некоторый фактический текст, который будет отображаться в случае, если клиент не может автоматически выполнить перенаправление. Обычно Apache маркирует этот текст в соответствии с используемым набором символов, которым является ISO-8859-1.
Т.е. такое поведение и кодировку сервер нам «подсовывает» по умолчанию. Там же указано, что в некоторых старых браузерах это может привести к ошибке распознавания кодировки на конечной странице. Это поведение кодировки можно подавить установкой переменной среды suppress-error-charset и мы получим заголовок следующего вида: Content-Type: text/html в котором будет отсутствовать кодировка.
SetEnvIf Host ^ suppress-error-charset
А если вы получаете страницы 40x-50x ошибок в кодировке iso-8859-1, то вероятнее всего они у вас просто отсутствуют как таковые и не заданы директивами ErrorDocument в конфигах Apache или локальном htaccess. Т.е. получаете стандартную заглушку в стандартной кодировке. Иначе страницы ошибок будут возвращены в той кодировке, которая настроена по умолчанию.
Подведём итог: давить или не давить кодировку ошибок, и создавать ли собственные страницы ошибок, решать вам, но я бы советовал просто забить. Цель этой статьи — чтобы вы не потратили пол дня на установление причин почему ваш Apache «работает неправильно». Я например, обычно сношу все страницы, создаваемые панельками сервера и в собственных страницах ошибок не вижу никакого смысла, кроме 404, и то, она уже генерируется движком сайта, а не конфигами.
P.S.: стало интересно поведение nginx в данном контексте при переадресациях. И вот:
HTTP/1.1 301 Moved Permanently Server: nginx/1.16.1 Date: Sat, 13 Feb 2021 11:14:48 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive Location: https://example.com/ <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.16.1</center> </body> </html>
Nginx не ставит этой странице никаких кодировок по умолчанию, а также не возвращает вспомогательную ссылку The document has moved here, что собственно и правильно.