ディレクトリ構造を保ったまま一括リダイレクトを設定する

ディレクトリ構造を保ったまま一括リダイレクトを設定する

ウェブサイトを移行したときなど、旧ページ URL のファイル名をある程度保ったまま新サーバーの新フォルダに全ページリダイレクトさせたい場合があります。

特定の拡張子へのアクセスだけリダイレクトしたい

旧サーバー: https://www.old-example.com/news/2018-11-06-press-release.html
新サーバー: https://www.new-example.com/pressrelease/old-news/2018-11-06-press-release.html

上記のように、旧サーバーの、拡張子 .html のリクエストだけ、新サーバーの別の構造下の同名ファイルにリダイレクトさせたい。この場合、旧サーバーの web.config に以下のように設定します。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="ルール名" enabled="true">
          <match url="^news/(.*)\\.html" />
          <action type="Redirect" url="https://www.new-example.com/pressrelease/old-news/{R:1}.html" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

上記のルールでは、旧サーバーの news フォルダにある、拡張子が .html のファイルにリクエストがあった場合、新サーバーの /pressrelease/old-news/ の同名の .html ファイルにリダイレクトを行う、という設定です。

特定フォルダ以下のすべてのアクセスを、同じファイル名でリダイレクトさせたい

旧サーバー: https://www.old-example.com/datafile/*
新サーバー: https://www.new-example.com/old-server/sample-datafile/*

この例では、 旧サーバーの /datafile/ 以下にある、PDF だったり ZIP だったりのリクエストを、新サーバーの特定のフォルダに、ファイル名を保持したままリダイレクトさせます。

<configuration>
  <system.webServer>
    <httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Found">
      <add wildcard="/datafile/*" destination="https://www.new-example.com/old-server/sample-datafile/$0" />
    </httpRedirect>
  </system.webServer>
</configuration>

上記のルールでは、旧サーバーの /datafile/xyz.pdf というリクエストを https://www.new-example.com/old-server/sample-datafile/xyz.pdf にリダイレクトを行います。

上記 2つの例は web.config での記述になりますので、旧サーバーが IIS 系の環境である必要があります。このメリットは、仮にリダイレクト対象が何万とあった場合でも、いちいちひとつひとつのファイルを指定してリダイレクトしなくても、自動的に 1 対 1 でのリダイレクトを行ってくれることです。