Closed3

クエリパラメータを引き継ぎながらCloudFront Functionsでリダイレクトだけさせる

kun432kun432

以下のような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;
    }
}
kun432kun432

あとはCloudFrontでディストリビューション作成して、ビューワーリクエストで指定すれば良い。その他、

  • オリジンは不要なのでダミーを入れておけば良い
  • クエリ文字列はキャッシュしない

にしておけば良さそう。一応想定通りには動いた。

このスクラップは2023/10/05にクローズされました