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
に設定しようとしましたが、問題は解決しません。
S3の/mypage
でファイルを提供するために/mypage.html
を取得するにはどうすればよいですか?
私はこの問題を抱えていたので、解決策を共有したいと思います:
ファイルのメタデータContent-type
をtext/html
に設定し、ファイルの名前を変更して最後の.html
を削除する必要があります。
そうすれば、ファイル拡張子なしですべてのページにアクセスできます。
一般にAmazon S3では、クリーンなURLを作成するために次のことができます。
「クリーン」な名前でページファイルをアップロードします。 mypage
を設定し、Content-Type
をtext/html
に設定します(リンク先の投稿の説明に従って)。拡張子を持たないようにアップロードする前にシステムのファイルの名前を変更するか、アップロード後にS3で拡張子のない rename にする必要があります。 S3上のファイル名は拡張子を持たない必要があります。
「クリーン」な名前でフォルダーを作成し、そのフォルダーにページファイルをアップロードします。名前は デフォルトのインデックスドキュメント に設定します。 index.html
。デフォルトのインデックスドキュメント名を確認する必要があります。これは、バケットをWebサイトとして設定するときに設定されますが、後で変更できます。
上記の作業を実行できない場合、名前キーmypage
で新しいゼロバイトオブジェクトをアップロードし、アップロードプロセス中にメタデータでWebsite Redirect Location
キーに値mypage.html
を指定してページリダイレクトを設定できます。 Amazon S3ドキュメントのウェブページリダイレクトの設定を参照してください。
Content-Type
をtext/html
に設定して、mypage
という名前の新しいオブジェクトにファイルをコピーすることもできます。
既に述べたように、ファイル拡張子を削除しますが、次の手順に従ってください。
そして、人々が言ったように、あなたのhtmlの新しいリンクが.htmlファイル拡張子を含まないようにしてください。これは私のために働いた。
/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
に設定してもうまくいかない理由はまだわかりません。
とにかく、バケットのIndex Document
とすべてのサブフォルダーをindex.html
を使用するように変更することで問題は解決します。
AWS CLIの場合:
ファイル名から拡張子を削除し、アカウントでAWS CLIをセットアップしたと仮定すると、コンソールで次のコマンドを実行してファイルのメタデータを設定できます。
aws s3 cp /path/to/file s3://yourwebsite.com --content-type 'text/html' --acl public-read
別の可能な解決策は、Lambda @ Edge powerを使用することです ドキュメントリファレンスはこちら 。
非常にシンプルでテスト済みのソリューション。 :
コレクションを使用している場合は、追加の/
文字の終わりまで
collections:
my_collection:
output:true
permalink: /:collection/:path/