Эта проблема вызвана слишком большим количеством перенаправлений. Это означает, что пользователь переходит на один URL-адрес, затем пользователь отправляется на другой URL-адрес, а затем отправляется на другой URL-адрес ... Веб-браузер обнаруживает несколько перенаправлений и отображает ошибку пользователя. В противном случае пользователь может зацикливаться, постоянно переходя от одного URL-адреса к другому и никогда не отображая нужную веб-страницу.
В вашем вопросе недостаточно информации о том, как вы настроили S3 и CloudFront, поэтому я объясню, как определить точную проблему.
Для устранения этой проблемы используйте curl
.
Допустим, ваша цель состоит в том, чтобы все пользователи перешли на https://www.example.com
. Теперь убедитесь, что этот URL не перенаправляет. Примечание. Некоторые веб-серверы перенаправляют DNS-имя на DNS-имя + URL-адрес домашней страницы. Если это так, то тест с URL-адресом домашней страницы (вторая команда).
curl -i https://www.example.com > data.txt
ИЛИ (замените URL своей домашней страницы):
curl -i https://www.example.com/index.html > data.txt
Теперь откройте файл data.txt
в редакторе. Первая строка должна быть HTTP/1.1 200
или HTTP/2 200
. Ключ 200 (что-нибудь между 200 и 299). Если вместо этого число 301 (Перемещено постоянно) или 307 (Временное перенаправление), то вы перенаправляете пользователя. Смотрите мой пример ниже. Это, скорее всего, проблема. Ключ в том, чтобы выяснить, почему ваше желаемое DNS-имя перенаправляется и на что оно перенаправляет. Затем найдите файл конфигурации / службу, которая перенаправляет неправильно.
Если предыдущая команда работает правильно, протестируйте другие поддерживаемые DNS-имена и посмотрите, правильно ли они перенаправляют на ваше DNS-имя (https://www.example.com). Распространенной проблемой является то, что перенаправления переходят на неправильный желаемый страница, которая затем перематывает назад и вперед перенаправляя.
Ваша цель состоит в том, чтобы веб-сервер возвращал следующее (которое включает как заголовки HTTP, так и тело HTML). Важными элементами являются код состояния (301 или 307) и перенаправление location
(5-я строка ниже). Тело HTML игнорируется для перенаправлений.
Пример правильного перенаправления для всего, кроме желаемого DNS-имени:
HTTP/2 301
date: Fri, 08 Mar 2019 04:17:18 GMT
server: Apache
x-frame-options: SAMEORIGIN
location: https://www.example.com/
content-length: 232
content-type: text/html; charset=iso-8859-1
via: 1.1 google
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.example.com/">here</a>.</p>
</body></html>
Используйте curl и протестируйте все поддерживаемые возможности:
curl -i http://www.example.com
Это должно перенаправить на https://www.example.com
curl -i http://example.com
Это должно перенаправить на https://www.examle.com
curl -i https://example.com
Это должно перенаправить на https://www.examle.com
Повторите вышеуказанные тесты, используя URL-адрес своей домашней страницы и несколько подстраниц.
Обычная проблема, которую я вижу даже на правильно работающих веб-сайтах, заключается в том, что пользователь перенаправляется более одного раза. Правильно спроектированные перенаправления должны отправлять пользователя в правильное местоположение за один шаг, а не за несколько шагов. Многократные перенаправления замедляют получение правильной страницы.