Как заменить ответ, а не перенаправление со статического маршрута маршрутизации веб-сайта S3? - PullRequest
0 голосов
/ 05 ноября 2018

В корзинах Amazon S3 могут размещаться статические веб-сайты, что очень, очень полезно и экономично по сравнению с размещением полноценного сервера. Он имеет функцию, где вы можете указать правила index.html, 404.html и перенаправления. Я спрашиваю о правилах перенаправления.

Есть ли способ заменить ключ и не перенаправить?

Этот пример ниже работает. Когда пользователь заходит на www.example.com, ему предоставляется страница index.html (и URL-адрес браузера не изменяется). Когда он запрашивает несуществующий URL-адрес, файл 404.html обслуживается (и URL браузера не изменяется) (это важно)

В приведенном ниже примере я указал правило перенаправления. Когда пользователь нажимает на это, URL браузера изменяется. Команда curl показывает, что S3 отправляет обратно перенаправление 301. Хорошо. Это то, что говорит правило - (оно говорит Redirect)

Но я не хочу перенаправлять все время. Иногда я хочу оставить URL-адрес в покое, но на другой странице. (аналогично тому, как на странице 404)

Практический пример:

  • Если пользователь нажимает /products/475872.html, я хочу, чтобы он увидел страницу 475872.html (это всегда работает)
  • Если пользователь нажимает / products / spiderman-action-figure, я хочу, чтобы он увидел страницу 475872.html, и не хочу, чтобы URL браузера изменялся.

На данный момент это не представляется возможным в S3. Является ли это возможным? Это мой вопрос.

{
    "Bucket": "www.example.com",
    "WebsiteConfiguration": {
        "ErrorDocument": {
            "Key": "404.html"
        },
        "IndexDocument": {
            "Suffix": "index.html"
        },
        "RoutingRules": [
            {
                "Condition": {
                    "KeyPrefixEquals": "products/spiderman-action-figure"
                },
                "Redirect": {
                    "ReplaceKeyWith": "475872.html"
                }
            }
        ]
    }
}

Соответствующий вопрос SO

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Это невозможно с правилами маршрутизации S3.

Они могут использоваться только для создания перенаправлений.

0 голосов
/ 05 ноября 2018

У меня была такая же проблема, вот как я ее решил.

Направьте вашу корзину S3 на CloudFront и перепишите шаблоны запросов.

enter image description here

В шаблоне пути,

/ products / spiderman-action-figure, указывающий на ваше происхождение /products/475872.html (URL-адрес корзины S3)

Более чистое решение, которое мы позже применили к изменению кода, использует Lambda@Edge.

https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html

enter image description here

И запрос функции Lambda, связанный с запросом на изменение источника URL, будет viewer request.

Пример реализации описан здесь.

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...