Подтвердить что ты не робот

Статические страницы S3 без расширения .html

При обслуживании статического сайта с Amazon S3 мне интересно, как избавиться от расширений файлов .html для каждой страницы.

Сейчас у меня есть:

mysite.com/             # works fine, serves index.html
mysite.com/mypage.html  # works fine
mysite.com/mypage       # doesn't work

Ошибка для /mypage показывает:

404 Not Found

Code: NoSuchKey
Message: The specified key does not exist.
Key: mypage
RequestId: 1089D7A26EFED9AD
HostId: Ud8cFy8Zl1mJ+oFjFOmU1Xacq9+v70KuaJfOc4nFMEPhd66AkLhr4Pj5u0QH6Gog

Я попытался установить Content-Type на text/html, как этот пост, но это не устраняет проблему для меня.

Как мне получить /mypage для обслуживания файла в /mypage.html на S3?

4b9b3361

Ответ 1

У меня была эта проблема, и я хотел бы поделиться решением:

Вам нужно установить метаданные файла Content-type на text/html И переименовать файл, удалив .html конца.

Таким образом, вы сможете достичь каждой страницы без расширения файла.

Ответ 2

В целом на Amazon S3 для создания чистых URL-адресов вы можете:

  • Загрузите файл страницы с "чистым" именем, например. mypage и установите для параметра Content-Type значение text/html (как сообщение, которое вы связали с описанным). Вы должны переименовать файл в своей системе, прежде чем загружать его без расширения, или переименовать его без расширения на S3 после загрузки. Имя файла на S3 не должно иметь расширения.

  • Создайте папку с "чистым" именем и загрузите файл страницы в эту папку с его именем, установленным в индексный документ по умолчанию, например. index.html. Вам нужно проверить, что такое имя документа индекса по умолчанию. Это устанавливается при настройке вашего ведра в качестве веб-сайта, но его можно изменить позже.

Если вы не можете выполнить описанную выше работу, вы можете загрузить новый объект с нулевым байтом с помощью ключа ключа mypage, а затем установить перенаправление страницы, указав ключ Website Redirect Location со значением mypage.html в метаданных во время процесса загрузки. См. Раздел Настройка перенаправления веб-страниц в документации Amazon S3.

Вы также можете скопировать файл в новый объект с именем mypage с Content-Type, установленным на text/html.

Ответ 3

Создание папки в /mypage и размещение index.html внутри нее не работало для меня. Оказывается, это связано с тем, что параметр "индексный документ" в ковке был изменен на myindex.html:

Bucket Properties --> Static Website Hosting --> Enable Website Hosting --> Index Document

Это действительно применялось ко всем подпапкам, так что он не искал /mypage/index.html, когда на трассе /mypage; вместо этого он искал /mypage/myindex.html.

Я просто изменил параметр myindex.html на index.html, и работает стандартная структура папок. Было бы одинаково работать с файлами myindex.html везде с этой настройкой на месте, но это казалось запутанным без реального выигрыша.

Я все еще не знаю, почему настройка Content-Type на text/html не работает - кажется, что она должна, поскольку это упоминается в нескольких местах.

В любом случае проблема решается путем изменения Bucket Index Document и всех подпапок для использования index.html.

Ответ 4

Как уже говорилось, удалите расширение файла, но просто выполните следующие шаги:

  • Перейдите в корзину Amazon S3.
  • Установите флажок рядом с файлом, который вы хотите связать правильно.
  • Нажмите "Свойства" справа, и появится новое окно. Он скажет "Object: filename"
  • Перейдите на вкладку "Метаданные", измените ее по умолчанию, для меня это "binary/octet-stream"; новое значение должно быть "text/html".
  • Сохранить.

И, как сказали люди, убедитесь, что ваши новые ссылки в вашем html больше не содержат расширение .html. Это сработало для меня.

Ответ 5

С AWI CLI:

Предполагая, что вы удалили расширение из имени файла и настроили AWS CLI в своей учетной записи, вы можете установить метаданные файла, выполнив эту команду в консоли:

aws s3 cp /path/to/file s3://yourwebsite.com --content-type 'text/html' --acl public-read

Ответ 6

Очень простое и протестированное решение.

  • Переименуйте файл, Удалите расширение (.html) из имени файла. (например, сменить gallery.html в галерею).
  • Изменить свойства файла. Добавить ключ метаданных (Тип контента = текст /html и язык контента = html).
  • Сохранить и протестировать URL-адрес браузера, например websiteurl.com/gallery.