У меня есть одностраничный веб-интерфейс 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:)