Статические страницы 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?
Ответы
Ответ 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.