Назад | Перейти на главную страницу

Перенаправление с CloudFront, но изменение URL

У меня есть статический веб-сайт 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 для /*.

Подождите, пока все распространится, и повторите тест.