概要
example.com ⇒ sample.net にドメインを変更した場合、AWSのCloudFront Functionを使えば簡単にリダイレクトできます。
CloudFrontのディストリビューションを作成します。
オリジンドメイン
どちみち設定したオリジンにはアクセス行かないので、オリジンドメインは何でもOKです。
代替ドメイン
カスタムSSL証明書
旧ドメインで使用していた証明書を設定します。
そのほかはデフォルトでOKです。
CloudFront Functionを作る
メニューから「関数」を選びます。表示されたページ内の「関数を作成」から関数を作ります。
関数
すべてをリダイレクトするように関数を書きます。
stringifyQueryStringはこちらのページを参考にさせていただきました
var querystring = require('querystring');
function stringifyQueryString(eventQueryString) {
var query = {};
Object.entries(eventQueryString).forEach(function(q) {
query[q[0]] = q[1].multiValue ? q[1].multiValue.map(function(m) {return m.value}) : q[1].value;
});
return querystring.stringify(query);
}
function handler(event) {
var request = event.request;
var headers = request.headers;
var response = {
statusCode: 302,
statusDescription: 'Found',
headers:
{ "location": { "value": `https://[新ドメイン]${request.uri}?${stringifyQueryString(request.querystring)}` } }
}
return response;
}
※このままだとクエリパラメータが無いときに無駄に「?」が付くので気持ち悪い人はちゃんと作ってください。
発行
同じ画面の「関連付けられているディストリビューション」から先ほど作ったディストリビューションを紐づけします。
旧ドメインのCNAMEあるいはAレコードにディストリビューションを設定
旧ドメインのCNAMEやAレコードにディストリビューションのドメインを指定します。
ディストリビューションのドメインとは一覧の「ドメイン名」列にあります。
これでリダイレクトします!
サブドメインの変更として書いてある記事がいくつかありましたが普通にドメイン変更した場合でも同様に行けました。コストも低いし便利です。クエリパラメータを維持してリダイレクトできるのも嬉しいです。
以前はS3を使ったリダイレクトなどありましたが、今はCloudFront Functionを使うほうが早くて安くて楽です。
もっといい案もある気がするのでお勧めリダイレクト設定案教えてください。