カテゴリー
[AWS x SEO対応] S3 & CloudFrontで静的ホスティングしたウェブサイトのドメイン移管 ~ 301リダイレクトを仕込む
※ 当ページには【広告/PR】を含む場合があります。
2021/03/14
hoge-s3-blog.jp
piyo-s3-blog.com
301リダイレクト
.htaccess
301リダイレクト?
301 Moved Permanently:
リクエストされたリソースのURLが永遠に変更されたことを示します。
レスポンスで新しいURLが与えられます。
302 Found:
リクエスト元のURLが一時的に変更されたことを示します。
リクエスト元のURLは今後さらに変更される可能性もあるので、
クライアントは引き続き同じURLを使用するべき、と解釈されます。
リダイレクトの設定を完了した後でGoogleクローラーにインデックスを催促
Lambda@Edgeでリダイレクトを自動化
piyo-s3-blog.com
hoge-s3-blog.jp
Lambda関数の作成
index.js
piyo-s3-blog.com
hoge-s3-blog.jp
piyo-s3-blog.com/piyo
piyo-s3-blog.com/fuga
hoge-s3-blog.jp/fuga
const convertMap = {
'/fuga/index.html': 'https://hoge-s3-blog.jp/fuga/index.html',
//👇リダイレクトしたいURLを連想配列として追加...
'/mofu/index.html': 'https://hoge-s3-blog.jp/mofu/index.html',
//...
};
exports.handler = async (event, context, callback) => {
const request = event.Records[0].cf.request;
const uri = request.uri;
const uriMod = uri.replace(/\/$/, '\/index.html').replace(/\/([^\.\/]+)$/, '/$1/index.html');
const val = convertMap[uriMod];
if(val !== undefined) {
console.log('+++ Redirect To +++');
console.log(val);
const redirectRes = {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
location: [{
key: 'Location',
value: val,
}],
},
};
return callback(null, redirectRes);
} else {
console.log('+++ Direct To +++');
console.log(uriMod);
request.uri = uriMod;
return callback(null, request);
}
};
piyo-s3-blog.com
Lambda関数の動作確認
{
"Records": [
{
"cf": {
"config": {
"distributionId": "EXAMPLE"
},
"request": {
"headers": {
"host": [
{
"key": "Host",
"value": "d123.cf.net"
}
],
"user-name": [
{
"key": "User-Name",
"value": "CloudFront"
}
]
},
"clientIp": "1111:2222:3333:4444",
"uri": "/piyo",
"method": "GET"
},
"response": {
"status": "200",
"statusDescription": "OK",
"headers": {
"x-cache": [
{
"key": "X-Cache",
"value": "Hello from Cloudfront"
}
]
}
}
}
}
]
}
Response
{
"headers": {
"host": [
{
"key": "Host",
"value": "d123.cf.net"
}
],
"user-name": [
{
"key": "User-Name",
"value": "CloudFront"
}
]
},
"clientIp": "1111:2222:3333:4444",
"uri": "/piyo/index.html",
"method": "GET"
}
Function Logs
START RequestId: ************************** Version: $LATEST
2021-03-14T08:24:23.279Z ****************** INFO +++ Direct To +++
2021-03-14T08:24:23.282Z ****************** INFO /piyo/index.html
END RequestId: **************************
REPORT RequestId: ************************* Duration: 5.96 ms Billed Duration: 6 ms Memory Size: 128 MB Max Memory Used: 65 MB Init Duration: 148.17 ms
uri
/fuga
{
"Records": [
{
"cf": {
//...
"uri": "/fuga",
//...
Response
{
"status": "301",
"statusDescription": "Moved Permanently",
"headers": {
"location": [
{
"key": "Location",
"value": "https://hoge-s3-blog.jp/fuga/index.html"
}
]
}
}
Function Logs
START RequestId: ********************* Version: $LATEST
2021-03-14T08:17:18.965Z ************* INFO +++ Redirect To +++
2021-03-14T08:17:18.965Z ************* INFO https://hoge-s3-blog.jp/fuga/index.html
END RequestId: *********************
REPORT RequestId: ******************** Duration: 2.44 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 65 MB
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー