8

Я заметил Amazon S3 Redirect rule - GET data is missing, но после выполнения принятого ответа мои параметры запроса по-прежнему не сохраняются.Правило перенаправления Amazon S3 - Сохранение запросов Params

У меня есть сайт, который использует React и React Router, то есть у меня есть несколько URL-адресов, которые загружают одинаковые HTML и JS, а затем JS определяет, какую часть приложения загружать на основе URL-адреса.

Например:

/Foo,/бар,/Baz все должны загрузить index.html, который загружает bundle.js. Затем bundle.js просматривает URL-адрес и перенаправляет какой-либо компонент React (также в bundle.js).

Однако в S3 нет файла foo, bar или baz, только index.html. То, что я хочу сделать, - это когда я получаю 404, перенаправляю на/#!/{URL} (например./Foo перенаправление на/#!/Foo). Это отлично работает с моим правилом перенаправления (ниже). Тем не менее, я также хочу привести параметры запроса со мной (например,/foo? Ping = pong перенаправляет на/#!/Foo? Ping = pong), но вместо этого/foo? Ping = pong просто перенаправляет на/#!/Foo.

Вот мои правила переадресации:

<RoutingRules> 
    <RoutingRule> 
     <Condition> 
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> 
     </Condition> 
     <Redirect> 
      <Protocol>http</Protocol> 
      <HostName>www.mydomain.com</HostName> 
      <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith> 
     </Redirect> 
    </RoutingRule> 
</RoutingRules> 

Любые идеи по каким-то образом я могу добиться этого? В идеале, без необходимости менять что-то в S3/CloudFront каждый раз, когда я добавляю новую страницу?

+0

Из любопытства, работает '/ foo /? Ping = pong', как и следовало ожидать? (добавление конечной косой черты перед '?') –

+0

Перекрестный пост ... https://stackoverflow.com/questions/20751301/how-can-i-get-query-strings-in-my-amazon-s3-static -website – doublejosh

ответ

17

Проблема была в том, что я создал источник в CloudFront, чтобы не пересылать строки запроса, поэтому, когда S3 получил запрос, он будет перенаправлять правильно без параметров запроса. Этот параметр можно найти в CloudFront> Behaviors> Forward Query Strings.

+1

Да! Спасатель! –

+0

Можно ли сохранить параметры запроса без CloudFront ??? – doublejosh

+0

@doublejosh: Вы имеете в виду просто нажать S3 напрямую? Параметры запроса не следует игнорировать. В моем случае CloudFront удалял параметры запроса, это была моя проблема. Если вы не используете CloudFront, вы не должны испытывать такую ​​же проблему. –

2

Если вы хотите иметь четкий URL-адрес, вы также можете зарегистрироваться this trick. Вам нужно настроить распределение облачной сети, а затем изменить поведение 404 в разделе «Страницы ошибок» вашего дистрибутива. Таким образом вы можете снова domain.com/foo/bar ссылки :)

+0

Спасибо за подсказку - я попытался настроить это в облачном режиме, но когда Я смотрю вкладку sources в инспекторе Chrome, загружает страницу index.html в качестве моего файла bundle.js и поэтому получаю «неожиданный токен <' error. Мои URL-адреса веб-сайта относятся к 'https://mydomain.io/search/0.1/index.html/article/uuid. И в ответном маршрутизаторе у меня есть базовое имя 'search/0.1/index.html ', поэтому одно из определений маршрутов относится к' article /: id'. S3 все еще, кажется, ищет папку '/ search/0.1/index.html/article'. Любые идеи, как я могу решить эту проблему? –

Смежные вопросы