[amazon-web-services] Перенаправление объектов Amazon S3



Answers

В случае, если для ведра включен хостинг веб-сайтов, существует альтернативный способ добавления 301 перенаправления. В соответствии с этим правила перенаправления описаны на уровне ковша в XML-формате и могут быть указаны в свойствах ведра с помощью консоли AWS S3 (раздел статического веб-сайта). В настоящее время полную документацию о ее синтаксисе можно найти here .

Этот подход удобен, когда у вас есть массовые движения URL, насколько это проще для управления всеми переадресациями в одном месте. Например, можно определить правила перенаправления

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>index.php</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyWith>index.html</ReplaceKeyWith>
    </Redirect>
</RoutingRule>
<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog.php?id=21</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyWith>mysql-utf-8-database-creation-snippet.html</ReplaceKeyWith>
    </Redirect>
</RoutingRule>

Похоже, это то же самое, что создавать поддельные объекты и указывать метаданные x-amz-website-redirect-location для них. Плохая новость заключается в том, что в XML может быть не более 50 таких правил для одного ведра. И да, это не удобно для управления XML. Но для меня этот путь сейчас проще. Опять же, потому что проще управлять всеми файлами в одном месте.

Этот XML-подход чрезвычайно полезен, если вы, скажем, переименовали каталог с большим количеством страниц. В этом случае необходимо создать одно правило перенаправления для каталога, а не отдельное правило для каждой страницы внутри него. Например

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
    </Redirect>
</RoutingRule>

Согласно этому правилу example.com/blog/whatever все будет перенаправлено на example.com/it-blog/whatever .

Другой полезной особенностью такого подхода является то, что он заменяет только префиксы. Так же, как и в каталогах, можно перенаправить страницу, но сохранить параметры запроса. Это может быть подходящим, если есть некоторая JS-обработка этих параметров запроса. С метаданными x-amz-website-redirect-location вы, вероятно, потеряете их.

Как я уже говорил, писать и читать XML может быть неудобно. Чтобы преодолеть это, я написал простой онлайн-инструмент в GWT для преобразования простого текста с прежними и новыми URL-адресами в формат XML. Он использует предикат KeyPrefixEquals и выполняет ReplaceKeyPrefixWith перенаправление.

Наконец, согласно documentation , если хостинг веб-сайтов отключен, поддержка перенаправления не применима для этого ведра.

Question

Можно ли поместить заголовок перенаправления на s3-объект? Как перенаправление 301.

Например:

mybucket.amazon-aws.com/myobject --> example.com/test

Предпочтительно, задав такой заголовок на объекте:

HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0



Изменить: см. Ответ выше, поскольку эта функциональность теперь является родной для AWS

Не на самом деле нет. Не существует встроенной функции, которая позволяет это, однако, то, что вы можете сделать, это создать свой объект, и даже если вы не сохраните его как HTML, вы можете применить его как файл HTML.

Например:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Refresh" content="0; URL=http://www.example.com/target/">
    <title>Redirect</title>
</head>

<body>
    <a href="http://www.example.com/target/">http://www.example.com/target/</a>
</body>
</html>

Посмотрите на эту страницу здесь: быстро просмотрите источник.

view-source: http://carltonbale.com.s3.amazonaws.com/distance_chart.png

Вы можете увидеть объяснение здесь:

Пункт 8: http://carltonbale.com/9-hidden-features-of-amazon-s3




AWSCLI позволяет вам делать это легко сейчас (вроде)

  1. Убедитесь, что ведро на 100%
  2. Убедитесь, что ведро находится в режиме веб-хостинга
  3. Только ссылайтесь на сайт, используя полный URL https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. Используйте вызов s3api для установки перенаправления

    aws s3api put-object --acl public-read --website-redirect-location " http://other-location.com " --bucket foo-bucket --key где-то / blah

Примечание . Вы не отправляете объект на S3, потому что он будет обслуживать только 301 и перенаправить заголовок Location .

Тест с

curl -v 2 -L https://<bucket_name>.s3-website-<region>.amazonaws.com/somewhere/blah




Links