Closed3
クエリパラメータを引き継ぎながらCloudFront Functionsでリダイレクトだけさせる
参考になった
以下のようなFunctionsを作成して発行する。redirect_urlはリダイレクト先URLを指定。クエリパラメータがない場合は403を返すようにしてみた。
function objectToQueryString(obj) {
var str = [];
for (var param in obj)
if (obj[param].multiValue)
str.push(param + "=" + obj[param].multiValue.map((item) => item.value).join(','));
else if (obj[param].value == '')
str.push(param);
else
str.push(param + "=" + obj[param].value);
return str.join("&");
}
function handler(event) {
var redirect_url = "https://www.example.com"
var response;
if (Object.keys(event.request.querystring).length) {
var loc = `${redirect_url}?${objectToQueryString(event.request.querystring)}`
response = {
statusCode: 301,
statusDescription: 'Found',
headers: {
'location': { value: loc }
}
};
return response;
} else {
response = {
statusCode: 403,
statusDescription: 'Forbidden',
};
return response;
}
}
あとはCloudFrontでディストリビューション作成して、ビューワーリクエストで指定すれば良い。その他、
- オリジンは不要なのでダミーを入れておけば良い
- クエリ文字列はキャッシュしない
にしておけば良さそう。一応想定通りには動いた。
このスクラップは2023/10/05にクローズされました