Apache mod_rewrite ルールのインポート

Ruslan Yakushev

はじめに

IIS 7 以降の URL Rewrite Module には、Apache mod_rewrite ルールを IIS URL 書き換えルールに変換するプロセスを大幅に簡略化するインポート機能が用意されています。 このチュートリアルでは、URL Rewrite Module に用意されているルールのインポート機能を使用して、いくつかの mod_rewrite ルールを IIS 構成ファイルにインポートします。 URL Rewrite Module をまだダウンロードしていない場合は、https://www.iis.net/downloads/microsoft/url-rewrite から行うことができます。

チュートリアル シナリオの設定

mod_rewrite ルールを変換し、変換したルールが正しく機能することを検証する方法を確認するために、Web サイトに正規のホスト名を適用する一般的なシナリオを実装します。 この例では、mysite.com の代わりに www.mysite.com の使用を強制し、それにより、www.mysite.com 以外のホスト名を使用する要求が行われた場合、その要求を正規のホスト名にリダイレクトできるようにします。

  1. IIS マネージャーを起動し、[Default Web Site] (既定の Web サイト) をクリックします。

  2. [アクション] ペインで、[バインド] をクリックし、ポート 8088 に新しい "http バインド" を追加します。

    [操作] ウィンドウの [サイトの編集] で [バインド] をクリックした後の [サイト バインド] ダイアログのスクリーンショット。"図 1: 新しいバインドを追加する"

  3. メモ帳を使用して、%SystemDrive%\windows\system32\drivers\etc\hosts を開き、ファイルの末尾に次の 2 行を追加します。

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    ドメイン区切り記号として "." の代わりに "_" を使用していることに注意してください。 これは、Web ブラウザーで、ドメイン ネーム システム (DNS) サーバーを使用してドメイン名の解決が試みられないようにするためです。

  4. hosts ファイルを保存します。

  5. Web ブラウザーを開き、サイト http://www_mysite_com/iisstart.htm および http://mysite_com/iisstart.htm に移動して、ホスト名が正しくセットアップされたことを確認します。

mod_rewrite ルールの変換

正規のホスト名の適用に使用する Apache mod_rewrite ルールは次のとおりです。

#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]

#And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www_mysite_com/$1 [L,R]

これらのルールを IIS URL 書き換え固有の形式に変換するには:

  1. IIS マネージャーを起動します。

  2. 左側の [接続] ペインで、[Default Web Site] (既定の Web サイト) を選択します。

  3. 右側の [Features View] (機能ビュー) で、[URL 書き換え] をクリックします。

    [U R L 書き換え] が選択されている [既定の Web サイト ホーム] ウィンドウのスクリーンショット。

    "図 2: [URL 書き換え] をクリックする"

  4. 右側の [アクション] ペインで、[Import Rules] (ルールのインポート) をクリックします。

  5. 上記の mod_rewrite ルールの例をコピーし、[書き換えルール] テキスト ボックスに貼り付けます。

    [Mod アンダースコア書き換えルールのインポート] ペインのスクリーンショット。一連の書き換えルールと、正常に変換されたルールのセットが表示されています。

    "図 3: [Rules to import] (インポートするルール)"

  6. [Converted Rules] (変換されたルール) ボックスの [ツリー表示] タブには、変換の結果がすぐに表示されます。 また、[XML ビュー] タブをクリックして、ルールが Web.config ファイルにどのように保存されているかも確認できます。

    [変換されたルール] セクションのツリー ビューと X M L ビューの切り替えのスクリーンショット。

    "図 4: [Converted rules] (変換されたルール)"

    [ツリー表示] に戻って、そこでノードを選択すると、[書き換えルール] テキスト ボックスの対応する mod_rewrite ルール ディレクティブが強調表示されます。

    変換されたルールのツリー ビューで選択されたノードのスクリーンショット。

    "図 5: [ツリー表示]"

    ルールの変換中、ルールに既定の名前が割り当てられたことに注意してください。 既定の名前をわかりやすい名前に変更するには、[ツリー表示] でルールを選択して右クリックし、コンテキスト メニューから [名前の変更] を選択します。

    変換されたルールを右クリックしてルールの名前を変更するスクリーンショット。

    "図 6: [名前の変更]"

    最初のルールの名前を ImportedRule1 から Redirect to www_mysite_com:non-80 (www_mysite_com:80 にリダイレクト) に変更します。 2 番目のルールの名前を ImportedRule2 から Redirect to www_mysite_com:80 (www_mysite_com:80 にリダイレクト) に変更します。

    [アクション] ペインで [適用] をクリックして、変換されたルールを Web.config ファイルに保存し、[Back to rules] (ルールに戻る) をクリックします。

    [適用]、[キャンセル]、[ルールに戻る] が強調されている [操作] ウィンドウのスクリーンショット。

    "図 7: [Back to rules] (ルールに戻る)"

変換されたルールをテストする

mod_rewrite 形式からインポートされたルールが正しく機能するかテストするには、Web ブラウザーを開き、次のいずれかの URL に移動します。

  • http://localhost/iisstart.htm
  • http://mysite_com/iisstart.htm

どちらの場合も、Web ブラウザーは http://www_mysite_com/iisstart.htm にリダイレクトされます。

さらに、次のいずれかの URL を試す場合:

  • http://localhost:8088/iisstart.htm
  • http://mysite_com:8088/iisstart.htm

Web ブラウザーは http://www_mysite_com:8088/iisstart.htm にリダイレクトされます。

mod_rewrite からインポートされたルールによって Web サイトの正規のホスト名を適用できるようになったことに注意してください。 Bing 検索を使用すると、他の Apache mod_rewrite ルールの例が表示されます。

免責情報

重要 - URL Rewrite Module では、Apache mod_rewrite ルールを機能的に同等の IIS URL 書き換えルールに変換しようとします。 ただし、Apache と IIS にアーキテクチャ上の違いがあるため、すべての mod_rewrite ルールを変換できるわけではありません。 mod_rewrite ルール セットについて調べて、その機能を理解してから変換プロセスを開始することを強くお勧めします。 さらに、IIS URL 書き換えルールに変換した後は、変換の結果を確認してテストし、対応する IIS 書き換えルール セットの URL 書き換えロジックが同じであることを確認します。

変換できるのは Apache mod_rewrite 構文に従っているルールのみであることに注意してください。 他の形式の書き換えルール (ISAPI_Rewrite、Ionic ISAPI Rewrite、IISRewrite など) は認識されないか、正しく変換されません。