Amazon S3でディレクトリ構成変更時に新しいパスにリダイレクトする方法

Amazon S3

Amazon S3でのサイトをホスティング、便利ですよね。そんなS3でディレクトリ構成を変更した時に、ちゃんと古いパスから新しいパスにリダイレクトをする設定をしていますか?

リダイレクトで被リンクとSEOパワーを引き継ぐ

途中でカテゴリーやタグの構成を変えたりして、パスを変えたくなることありますよね。でもそうするとページのURLが変わってしまうということです。

何も対応をしないと、そのページが持っていた被リンクやSEOパワーがなくなってしまいます。

なので、通常古いパスでも自動的に新しいパスを表示するようにリダイレクトの設定をサーバー側で行います。そうすると、元のパスがもっていた被リンクやSEOパワーを引き継ぐことができます。

S3でも簡単にリダイレクトの設定をすることができます。

S3での設定方法

S3のコンソールから対象のバケットを右クリックし、プロパティをクリックします。

step1

画面右に現れるプロパティにて、「静的ウェブサイトホスティング」をクリックして現れる「リダイレクトルールを編集する」をクリックします。

step2

表示されるテキストエリアにXMLでリダイレクトルールを入力し、「保存」をクリックします。(リダイレクトルールについては後述)

step3

リダイレクトルールの書き方

リダイレクトルールはXMLで記述します。詳しい記述方法については次のページをご覧ください。

ルーティングルールを指定するための構文

基本的には一つのルールはRoutingRule要素です。それを束ねるのがRoutingRules要素になります。

一つのRoutingRuleはCondition要素とRedirect要素で構成されます。

Condition要素でリダイレクトするパスの条件を記述し、Redirect要素で、それをリダイレクトする先を指定するということです。

私の場合は、

1
2
3
http://webfood.info/categories/affiliate/
http://webfood.info/categories/web-app-dev/
http://webfood.info/categories/culture/

↓↓

1
2
3
http://webfood.info/affiliate/
http://webfood.info/web-app-dev/
http://webfood.info/culture/

のように、カテゴリーページをcategories/配下ではなく、ルート直下に変更しました。

また、タグについては、

1
2
3
4
http://webfood.info/tags/review/
http://webfood.info/tags/html_css/
http://webfood.info/tags/rails/
http://webfood.info/tags/music/

↓↓

1
2
3
4
http://webfood.info/affiliate/review/
http://webfood.info/web-app-dev/html_css/
http://webfood.info/web-app-dev/rails/
http://webfood.info/culture/music/

のように、紐づくカテゴリーの下に配置するようにしました。本当はタグはもっとたくさんあるのですが、多すぎるのでここに書くのはこのくらいにしぼりました。

このルールを適用するルールはXMLで次のように書きます。

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
<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>categories/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyPrefixWith/>
        </Redirect>
    </RoutingRule>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>tags/review/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyWith>affiliate/review/</ReplaceKeyWith>
        </Redirect>
    </RoutingRule>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>tags/html_css/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyWith>web-app-dev/html_css/</ReplaceKeyWith>
        </Redirect>
    </RoutingRule>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>tags/rails/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyWith>web-app-dev/rails/</ReplaceKeyWith>
        </Redirect>
    </RoutingRule>
  <RoutingRule>
        <Condition>
            <KeyPrefixEquals>tags/music/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyWith>culture/music/</ReplaceKeyWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

一番最初のルールで、

1
2
3
4
5
6
<Condition>
    <KeyPrefixEquals>categories/</KeyPrefixEquals>
</Condition>
<Redirect>
    <ReplaceKeyPrefixWith/>
</Redirect>

KeyPrefixEqualsにて、categories/がprefixに入るパスに適用されます。prefixとはパスの最初の部分ということです。

ReplaceKeyPrefixWithにてそのprefixを置き換える文字列を指定します。<ReplaceKeyPrefixWith/><ReplaceKeyPrefixWith></ReplaceKeyPrefixWith>と同意なので、0文字の文字列に置き換えます。なので、下のようにcategories/という部分は削除されます。

1
http://webfood.info/categories/affiliate/

↓↓

1
http://webfood.info/affiliate/

このルールは正規表現のように、categories/というprefixを持つパス全てに適用され、リダイレクト先ももとのパスによって変化します。(上の例でいうとaffiliateという部分が残るため)

これに対して、タグはピンポイントでリダイレクト先を指定しています。

1
2
3
4
5
6
<Condition>
    <KeyPrefixEquals>tags/review/</KeyPrefixEquals>
</Condition>
<Redirect>
    <ReplaceKeyWith>affiliate/review/</ReplaceKeyWith>
</Redirect>

というのは、上の例でいうとreviewタグがaffiliateカテゴリーに紐づくのはS3側でわからないから、こちらで指定してあげる必要があるからです。

ピンポイントで指定するには、先ほど紹介したReplaceKeyPrefixWithではなくReplaceKeyWithを使用します。

これで、次のようにリダイレクトされます。

1
http://webfood.info/tags/review/

↓↓

1
http://webfood.info/affiliate/review/

注意点

基本的にこのXMLは修正して保存をクリックすればすぐに反映されます。色々とこのXMLを変更しているのに反映されないなーと感じた場合は、ブラウザに残るキャッシュが悪さをして古いルールを適用していることがあるので、キャッシュをクリアするなり、シークレットモードでブラウザを起動するなりしてみてください。

さいごに

いかがでしたでしょうか。S3ではこんな感じでかなり柔軟にリダイレクトを制御できます。ディレクトリ変更も簡単にできますし、httpからhttpsへ変更するのも簡単にできます。興味のある方は上で紹介した公式サイトで調べてみてください。

羊毛や小麦