Microsoft Azure Web サイトで 301 リダイレクトを行う
SERVER
Web サイトの引っ越しをしたときによくお世話になるのが "301 Moved Permanently" リダイレクトです。
Apache でこのレスポンスを返したいときには .htaccess ファイルを編集するのはよく知られていますが、Microsoft Azure Web サイトでも web.config ファイルを編集することで 301 レスポンスを返せるようになっていました。
web.config で 301 レスポンスを返すためには <system.webServer> タグ内で <rewrite> タグを使います。
ここにどのような URL へのリクエストがきたときに 301 レスポンスを返すかを <rule> タグを使って指定します。<rule> タグは複数指定することができ、場合によっては <conditions> タグを使って、さらに URL 以外のサーバー変数を使って条件を絞ることもできます。
web.config に 301 リダイレクトを設定する
たとえば、リクエストがあった URL をそのまま別のドメインに転送したい場合には、次のような web.config を用意します。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect All" stopProcessing="true">
<match url="(.*)"/>
<action type="Redirect" url="http://ez-net.jp{R:1}" redirectType="Permanent"></action>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
ここの <rule> で、どのような場合にリダイレクトを行うかを指定しています。このタグの "name" では、このルールにつける名前を指定しています。
次の "stopProcessing" は、このルールを適用した場合にそこでルールの処理を終了するかどうかを指定します。"true" であれば、このルールが適用された場合に、それ以降のルールを適用しません。逆に "false" を指定した場合は、このルールが適用された後で、さらに重ねて別のルールを適用できます。"stopProcessing" を省略した場合は "false" になるようです。
なお、リダイレクトの場合はルールが適用された時点で、ルールで指定した別の URL へリダイレクトされるようで、この "stopProcessing" の値はどちらでもここでルール処理が終了されるようでした。そのため、ここで "stopProcessing" を指定するのも語弊があると感じる場合は、指定を省略するのがいいかもしれません。
この <rule> タグの中の <match> タグで、どのような URL が要求されたときに <action> で指定した処理を行うかを指定しています。
<match> タグの "url" では、どの URL のときにルールを適用するかを正規表現で指定します。今回は "(.*)" なので、すべての URL に対してルールを適用します。すべての文字を意味する ".*" を括弧でくくっているのは、正規表現のグループ化(後方参照)で、その部分に当てはまった文字列をリダイレクト先の指定で使うためです。ここで括弧でくくった値は "{R:1}" というようにして使用できます。
そして <action> タグでは "type" を "Redirect" とすることで、ここの "url" で指定した URL へリダイレクトすることができます。ここの "{R:1}" という部分が、先ほどの <match> で紹介した正規表現のグループ化を使って指定した部分の文字列に置き換わります。
また、このとき "redirectType" を指定することで、そのリダイレクトがどういった意味かをレスポンスコードで返すことができます。ここでは次のような "redirectType" が指定できるようです。
redirectType Response (省略時) 301 Moved Permanently Permanent 301 Moved Permanently Found 302 Redirect SeeOther 303 See Other Temporary 307 Moved Temporarily リダイレクト系のレスポンスには、他にも "300 Multiple Choices" や "304 Not Modified" なども HTTP の仕様では定義されているようですが、これらのステータスコードを web.config を使って指定する方法があるかは分かりませんでした。