У меня есть статический веб-сайт S3, и я хочу перенаправить все запросы на страницу индекса. Итак, если вы пойдете в mysite.com/this_doesnt_exist
он должен перенаправить на mysite.com
.
Мне удалось настроить это поведение с помощью Пользовательский ответ при ошибке как на изображении выше, но дело в том, что когда я захожу в mysite.com/this_doesnt_exist
Я вижу страницу индекса, но URL-адрес в адресной строке не меняется. Я хочу, чтобы это изменилось.
Я также пробовал использовать Правила перенаправления в корзине S3, но, похоже, он не работает, когда настроен CloudFront. У меня есть еще одна корзина для тестовой среды без настроенного CloudFront, и она работала там с этим правилом:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<ReplaceKeyWith/>
</Redirect>
</RoutingRule>
</RoutingRules>
Измените свое доменное имя Origin с example-bucket.s3.amazonaws.com
к example-bucket.s3-website.${region}.amazonaws.com
(подставляя фактический регион вашего сегмента), чтобы правила перенаправления S3 работали. Варианты сегментов по умолчанию в CloudFront предназначены для конечных точек REST ваших сегментов, которые не обрабатывают правила перенаправления.
Изменить <Redirect>
заблокировать в своем правиле перенаправления, чтобы Location
заголовок, сгенерированный перенаправлением S3, отправляет вас на правильное имя хоста (в противном случае он будет перенаправлять браузер непосредственно на конечную точку хостинга веб-сайта корзины). Вот, www.example.com
- это имя хоста, указывающее на ваш дистрибутив CloudFront.
<Redirect>
<Protocol>https</Protocol>
<HostName>www.example.com</HostName>
<ReplaceKeyWith/>
</Redirect>
Удалите пользовательские настройки ошибок.
Создать аннулирование CloudFront для /*
.
Подождите, пока все распространится, и повторите тест.