はじめに
IIS 7 以降の URL 書き換えモジュールには、Apache mod_rewrite 規則を IIS URL 書き換え規則に変換するプロセスを大幅に簡略化するインポート機能が用意されています。 このチュートリアルでは、URL 書き換えモジュールに用意されているインポート ルール機能を使用して、いくつかのmod_rewriteルールを IIS 構成ファイルにインポートします。 URL 書き換えモジュールをまだダウンロードしていない場合は、 https://www.iis.net/downloads/microsoft/url-rewriteでダウンロードできます。
チュートリアル シナリオを設定する
mod_rewriteルールを変換し、変換されたルールが正しく機能することを確認する方法を確認するには、Web サイトに正規のホスト名を適用する一般的なシナリオを実装します。 この例では、www.mysite.comではなくmysite.comを強制的に使用します。これにより、www.mysite.com以外のホスト名を使用する要求が行われた場合、その要求を正規のホスト名にリダイレクトできます。
IIS マネージャーを起動し、[既定の Web サイト] をクリックします。
[操作] ウィンドウで、[バインド] をクリックし、ポート 8088 の新しい http バインドを追加します。
図 1: 新しいバインドを追加するメモ帳を使用して、
%SystemDrive%\windows\system32\drivers\etc\hostsを開き、ファイルの末尾に次の 2 つの行を追加します。127.0.0.1 www_mysite_com 127.0.0.1 mysite_comドメイン区切り記号に "." ではなく "_" を使用していることに注意してください。 これは、Web ブラウザーがドメイン ネーム システム (DNS) サーバーを使用してドメイン名の解決を試みないようにするためです。
hosts ファイルを保存します。
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 書き換え固有の形式に変換するには:
IIS マネージャーを起動します。
左側の [接続] ウィンドウで、[既定の Web サイト] を選択します。
右側の [ 機能] ビューで、[ URL 書き換え] をクリックします。
図 2: [URL の書き換え] をクリックする
右側の [ 操作] ウィンドウで、[ルールの インポート] をクリックします。
上記の規則mod_rewrite例をコピーし、[ 書き換えルール ] テキスト ボックスに貼り付けます。
図 3: インポートするルール
[変換されたルール] ボックスの [ツリー ビュー] タブには、変換の結果がすぐに表示されます。 [ XML ビュー ] タブをクリックして、ルールが Web.config ファイルにどのように格納されているかを確認することもできます。
図 4: 変換された規則
ツリー ビューに戻ってノードを選択すると、[書き換えルール] テキスト ボックスの対応するmod_rewriteルール ディレクティブが強調表示されます。
図 5: ツリー ビュー
ルールの変換中に、ルールに既定の名前が割り当てられたことに注意してください。 既定の名前をよりわかりやすい名前に変更するには、 ツリー ビューでルールを選択し、右クリックして、コンテキスト メニューから [名前の変更 ] を選択します。
図 6: 名前の変更
最初の規則の名前を ImportedRule1 から www_mysite_com:非80へのリダイレクト に変更します。 2 番目の規則の名前を ImportedRule2 から www_mysite_com:80 にリダイレクト に変更します。
[操作] ウィンドウで、[適用] をクリックして変換されたルールを Web.config ファイルに保存し、[ルールに戻る] をクリックします。
図 7: ルールに戻る
変換されたルールをテストする
mod_rewrite形式からインポートされたルールが正しく機能することをテストするには、Web ブラウザーを開き、次のいずれかの URL に移動します。
http://localhost/iisstart.htmhttp://mysite_com/iisstart.htm
どちらの場合も、Web ブラウザーは http://www_mysite_com/iisstart.htmにリダイレクトされます。
また、次のいずれかの URL を試す場合は、次のようにします。
http://localhost:8088/iisstart.htmhttp://mysite_com:8088/iisstart.htm
Web ブラウザーが http://www_mysite_com:8088/iisstart.htmにリダイレクトされます。
mod_rewriteからインポートされた規則により、Web サイトの正規ホスト名が適用されることに注意してください。 Bing検索では、Apache mod_rewrite ルールの他の例が表示されます。
免責事項
重要 - URL 書き換えモジュールは、Apache mod_rewrite 規則を機能的に同等の IIS URL 書き換え規則に変換しようとします。 ただし、Apache と IIS のアーキテクチャの違いにより、すべてのmod_rewriteルールを変換できるわけではありません。 変換プロセスを開始する前に、その機能を理解するまで、mod_rewriteルール セットを調査することを強くお勧めします。 次に、IIS URL 書き換え規則に変換した後、変換の結果を確認してテストし、対応する IIS 書き換え規則セットに同じ URL 書き換えロジックが提供されていることを確認します。
Apache mod_rewrite 構文に従う規則のみを変換できることに注意してください。 他の形式の書き換え規則 (ISAPI_Rewrite、Ionic ISAPI Rewrite、IISRewrite など) は認識されないか、正しく変換されません。