AWS CloudFuntion URL 変更#
AWS CloudFront Functions を使用して、ブラウザリクエストの URL を書き換えてオリジンに送信するには、HTTP リクエストを別の URL にリダイレクトする関数を作成する必要があります。
AWS ドキュメントには、CloudFront Functions を使用して HTTP リクエストを別の URL にリダイレクトする方法が記載されています ¹。
また、Classmethod 社の記事には、CloudFront Functions でオリジンに手を加えずに URL リダイレクトを行う方法が記載されています ³。
ご参考までに、以下は CloudFront Functions で HTTP リクエストを別の URL にリダイレクトする例です ²。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| function handler(event) {
var request = event.request;
var headers = request.headers;
var uri = request.uri;
var host = headers.host.value;
var newurl = null;
// Check the URI is '/abc/sign-up'.
if (uri === "/abc/sign-up") {
newurl = `https://${host}/sign-up`;
}
if (newurl !== null) {
return {
statusCode: 301,
statusDescription: "Moved Permanently",
headers: {
location: { value: newurl },
},
};
}
return request;
}
|
この例では、URI が/abc/sign-upに一致した場合に、https://${host}/sign-upへリダイレクトしています。この例を参考に、ご自身の環境に合わせた関数を作成してください。
¹: AWS 公式ドキュメント
²: AWS 公式ドキュメント
³: Classmethod 社の記事
ソース: Bing との会話 2023/6/26
index.html を追加してファイル名を含まない URL をリクエストする#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function handler(event) {
var request = event.request;
var uri = request.uri;
// Check whether the URI is missing a file name.
if (uri.endsWith("/")) {
request.uri += "index.html";
}
// Check whether the URI is missing a file extension.
else if (!uri.includes(".")) {
request.uri += "/index.html";
}
return request;
}
|
atob は使えない / Buffer も使えない#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| var jwtDecode = function (jwt) {
function atob(str) {
return new Buffer(str, "base64").toString("binary");
}
function b64DecodeUnicode(str) {
return decodeURIComponent(
atob(str).replace(/(.)/g, function (m, p) {
var code = p.charCodeAt(0).toString(16).toUpperCase();
if (code.length < 2) {
code = "0" + code;
}
return "%" + code;
})
);
}
function decode(str) {
var output = str.replace(/-/g, "+").replace(/_/g, "/");
switch (output.length % 4) {
case 0:
break;
case 2:
output += "==";
break;
case 3:
output += "=";
break;
default:
throw "Illegal base64url string!";
}
try {
return b64DecodeUnicode(output);
} catch (err) {
return atob(output);
}
}
var jwtArray = jwt.split(".");
return {
header: decode(jwtArray[0]),
payload: decode(jwtArray[1]),
signature: decode(jwtArray[2]),
};
};
|