none
「web.config」1ファイルで、301リダイレクト、302リダイレクトを一度に書く方法 RRS feed

  • 質問

  • 基本的な質問ですみません。

    IIS6の環境でweb.configを使っています。
    「web.config」1ファイルで、301リダイレクト、302リダイレクトを一度に書きたいのですが、
    調べてみたものの、方法がわからず困っている状況です。

    301リダイレクト・302リダイレクトですが、例えば下記のような内容です。
    これを1ファイルで表現するとすれば、どのようにすればよろしいでしょうか。
    お手数をおかけしますが、教えていただけるとありがたいです。よろしくお願いいたします。


    ▼301リダイレクトの例
    <configuration>
       <system.webServer>
          <httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent">
             <add wildcard="*.html" destination="/index.html" />
             <add wildcard="/test/*.html" destination="/index.html" />
          </httpRedirect>
       </system.webServer>
    </configuration>

    ▼302リダイレクトの例
    <configuration>
       <system.webServer>
          <httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Found">
             <add wildcard="*.php" destination="/default.html" />
          </httpRedirect>
       </system.webServer>
    </configuration>
    2018年4月21日 3:37

回答

  • こんにちは、

    1つの web.config で <httpRedirect> 要素を2つ以上定義することはできないようです。既に試されているかと思いますが、httpResponseStatus 属性をもつ httpRedirect 要素を2つ以上定義すると、内部サーバーエラー (HTTP Error 500.19) となってしまいますね。

    HTTP Error 500.19 - Internal Server Error

    こちらも既にご存知かもしれませんが、IIS 7 以降には URL 書き換えモジュール (URL Rewrite) という機能があり、この URL 書き換えモジュールを使用できるのであれば、今回のご質問の要件は容易に満たすことができます。例えば、次の設定のようにです:

    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="My rule name 301" stopProcessing="true">
                <match url=".*301" />
                <action type="Redirect" url="/" redirectType="Permanent" />
            </rule>
            <rule name="My rule name 302" stopProcessing="true">
                <match url=".*302" />
                <action type="Redirect" url="/" redirectType="Found" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>

    回答としては余計な意見と承知していますが、上の設定例の柔軟性からも伺えるように、IIS の HTTP Redirection 機能は URL 書き換えモジュールに取って代わられた機能である印象です。

    その要件を IIS 6 で実装しなければならない、という事情があるのかどうかは与り知らないところですが、可能であるならば IIS 7 以降を使用するか、または (1) IIS 6 の設定ではなく、アプリケーションプログラムによる実装 (2) リダイレクト先の新システム側でハンドルする、のいずれかの方法が現実的な解決策と思われます。

    以上です。本回答中にご不明な点があればご返信にてお知らせください。


    --- Seiji Momoto

    • 回答としてマーク EleT 2018年4月21日 15:03
    2018年4月21日 10:20

すべての返信

  • こんにちは、

    1つの web.config で <httpRedirect> 要素を2つ以上定義することはできないようです。既に試されているかと思いますが、httpResponseStatus 属性をもつ httpRedirect 要素を2つ以上定義すると、内部サーバーエラー (HTTP Error 500.19) となってしまいますね。

    HTTP Error 500.19 - Internal Server Error

    こちらも既にご存知かもしれませんが、IIS 7 以降には URL 書き換えモジュール (URL Rewrite) という機能があり、この URL 書き換えモジュールを使用できるのであれば、今回のご質問の要件は容易に満たすことができます。例えば、次の設定のようにです:

    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="My rule name 301" stopProcessing="true">
                <match url=".*301" />
                <action type="Redirect" url="/" redirectType="Permanent" />
            </rule>
            <rule name="My rule name 302" stopProcessing="true">
                <match url=".*302" />
                <action type="Redirect" url="/" redirectType="Found" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>

    回答としては余計な意見と承知していますが、上の設定例の柔軟性からも伺えるように、IIS の HTTP Redirection 機能は URL 書き換えモジュールに取って代わられた機能である印象です。

    その要件を IIS 6 で実装しなければならない、という事情があるのかどうかは与り知らないところですが、可能であるならば IIS 7 以降を使用するか、または (1) IIS 6 の設定ではなく、アプリケーションプログラムによる実装 (2) リダイレクト先の新システム側でハンドルする、のいずれかの方法が現実的な解決策と思われます。

    以上です。本回答中にご不明な点があればご返信にてお知らせください。


    --- Seiji Momoto

    • 回答としてマーク EleT 2018年4月21日 15:03
    2018年4月21日 10:20
  • Seiji Momoto様、大変詳しいご説明をいただきまして、ありがとうございます。

    そうなんです。httpRedirect要素を2つ以上定義すると、内部サーバーエラーになってしまうんです。
    そうですか、IIS6だとやはり1ファイルにまとめる方法はないんですね。

    現状、IIS7への変更は難しいので、下層に別途web.configを置くなどで対応したいと思います。
    ありがとうございました!
    2018年4月21日 15:03