S3の静的Webサイトホスティング機能についての所感
静的Webサイトホスティング機能で最低限求められること
Webサーバーの代替
index.htmlの省略
ApacheでいうところのDirectoryIndex
トレイリングスラッシュの処理
相対パスが壊れるため
リダイレクト
エラーハンドリング
4xx, 5xxの場合のエラーページの出し分け
S3の静的Webサイトホスティング機能はリダイレクト機能がかなり貧弱
条件記述が以下2つの組み合わせでかなりしょっぱい
KeyPrefixEquals
リクエストをリダイレクトするオブジェクトキー名のプレフィックス
HttpErrorCodeReturnedEquals
エラーが発生した場合、エラーコードがこの値に等しい場合は、指定されたリダイレクトが適用
パスに対してのアプローチがプレフィックスだけなのがキツい
===
自分の場合はニーズが合わなかった
自分がやりたかったこと
国際化対応しているサイトをホスティング
URLは言語毎にディレクトリが切ってある
/en/
/ja/
/直下にはindex.htmlは置かず、TOPページは/en/としたい
S3のリダイレクト機能だと/に対してのアクセスを適切に処理できない
結局、エッジにCloudFrontを立てて、CloudFront Functionsでリダイレクトするようにした
code: js
function handler(event) {
var request = event.request;
var uri = request.uri;
var response;
if (uri === '' || uri === '/' || uri === '/index.html')
{
response = {
statusCode: 302,
statusDescription: 'Found',
headers:
{ "location": { "value": '/en/' }}
}
return response;
}
else if (uri.endsWith('/'))
{
request.uri += 'index.html';
}
else if (!uri.includes('.')) {
response = {
statusCode: 302,
statusDescription: 'Found',
headers:
{ "location": { "value": request.uri + '/' }}
}
return response;
}
return request;
}
以下のページをまるまる参考にして、/の場合だけ処理を足した