Глубокие ссылки с интерфейсом Backbone на S3 - PullRequest
4 голосов
/ 16 февраля 2012

У меня есть одностраничный веб-интерфейс javascript (Backbone), работающий на S3, и я хотел бы иметь пару глубоких ссылок, которые будут перенаправлены в один и тот же индексный файл. Обычно вы делаете это с mod_rewrite в Apache, но в S3 нет способа сделать это.

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

Существует еще одно решение, уродливое, но лучше, чем взломать документ об ошибке:

Оказывается, вы можете создать копию index.html и назвать ее просто так же, как и подкаталог (за исключением косой черты), например, если я клонирую index.html и назову его «about», и сделаю убедитесь, что для Content-Type установлено значение text / html (на вкладке метаданных), все запросы к / about будут возвращать новое about, которое является копией index.html.

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

Кроме этих двух хакерских обходных путей, я не вижу способа сделать это, кроме как прибегнуть к хешбангу ..

Любые предложения будут с благодарностью.


UPDATE:

S3 теперь (на самом деле некоторое время) поддерживает Индексные документы , что решает эту проблему.

Также, если вы используете Route 53 для управления DNS, вы можете настроить запись псевдонима , указывающую на ваш контейнер S3, так что вам больше не нужен поддомен + cname:)

Ответы [ 2 ]

1 голос
/ 07 мая 2013

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

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>topic/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyPrefixWith>#topic/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

Остальное обрабатывается в приложении Backbone.js.

1 голос
/ 25 марта 2012

К сожалению, насколько я знаю (и я довольно часто пользуюсь сайтами s3), вы правы. Как вы сказали, хак 404 - действительно плохая идея, и поэтому у вас есть следующие варианты:

  • Используйте какой-нибудь обычный бэкэнд, а не S3
  • Обход Content-Type
  • Hashbangs

Извините, что принесу плохие новости:)

Для меня тот факт, что вы не можете направить корень домена на сайты S3, стал преградой для некоторых моих вещей. Сценарии типа mod_rewrite звучат как еще один хороший пример, когда он просто не работает.

...