Apache mod_rewrite ルールのインポート

作成者 : Ruslan Yakushev
発行日 : 2008 年 5 月 28 日 (作業者 : ruslany(英語))
更新日 : 2008 年 11 月 17 日 (作業者 : ruslany(英語))

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

mod_rewrite から変換したルールが正しく機能していることを確認するには、Web サイトに標準のホスト名を強制する一般的なシナリオを実装します。mysite.com ではなく www.mysite.com を強制的に使用するため、www.mysite.com 以外のホスト名を使用して要求が実行された場合は、要求を標準のホスト名にリダイレクトします。

シナリオを設定するには、次の手順を使用します。

1. IIS マネージャーを開き、[Default Web Site] をクリックします。
2. [操作] ウィンドウで、[バインド] をクリックして、ポート 8088 の新しい http バインドを追加します。

Dd939075.f1_scenario(ja-jp,TechNet.10).gif
 
3. メモ帳を使用してファイル %SystemDrive%\windows\system32\drivers\etc\hosts を開き、次の 2 行を最後に追加します。

127.0.0.1 www_mysite_com
127.0.0.1 mysite_com

ドメイン区切り文字として "." の代わりに "_" を使用します。これにより、Web ブラウザーで DNS サーバーを使用してドメイン名を解決することを防止します。

4. 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 マネージャーを開いて [URL Rewrite] をダブルクリックします。

Dd939075.f2_mod(ja-jp,TechNet.10).gif
 
mod_rewrite ルールを [Rewrite rules] テキスト ボックスに貼り付けます。

Dd939075.f3_rules(ja-jp,TechNet.10).gif
 
[Converted rules] グループ ボックスの [Tree View] には、変換の結果が表示されます。さらに、[XML View] に切り替えて、ルールが web.config ファイルにどのように格納されるのかも確認できます。

Dd939075.f4_import(ja-jp,TechNet.10).gif
 
[Tree View] に切り替えて戻り、[Tree View] でノードを選択すると、[Rewrite rules] テキスト ボックスに示される対応する mod_rewrite ルールが強調表示されます。

Dd939075.f5_rules(ja-jp,TechNet.10).gif
 
ルール変換中は、ルールは既定の名前で割り当てられていることに注意してください。名前を変更して、そのルールの内容について意味のある情報を伝達できます。ルールの名前を変更するには、[Tree View] でそのルールを選択し、右クリックしてショートカット メニューを表示します。

Dd939075.f6_rename(ja-jp,TechNet.10).gif
 

1 番目のルールの名前を ImportedRule1 から Redirect to www_mysite_com:non-80 に変更します。2 番目のルールの名前を ImportedRule2 から Redirect to www_mysite_com:80 に変更します。

[適用] をクリックして、変換したルールを web.config ファイルに保存し、[Back to rules] アクションをクリックします。

Dd939075.f7_backtorules(ja-jp,TechNet.10).gif

変換したルールのテスト

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

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

両方とも、Web ブラウザーが http://www_mysite_com/iisstart.htm にリダイレクトされることを確認します。
 
また、

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

これらの URL のいずれかを実行した場合は、ブラウザーが http://www_mysite_com:8088/iisstart.htm にリダイレクトされることを確認します。

Dd939075.knownissue(ja-jp,TechNet.10).gif 既知の問題

REQUEST_URI サーバー変数を使用する mod_rewrite ルールは、URL 書き換えモジュールの [Import Rules...] 機能を使用してインポートされた場合、正しく機能しない場合があります。インポートしたルールを修正するには、いずれかのテキスト エディターを使用して、これらのルールで構成される web.config ファイルを開きます。<rewrite> セクションを検索して、そのセクション内で、文字列 "{SCRIPT_NAME}" のすべてのインスタンスを文字列 "{URL}" で置き換えます。

まとめ

このチュートリアルでは、Apache mod_rewrite ルールを IIS 構成にインポートして、URL の書き換えモジュールで使用できるようにする方法について説明しました。mod_rewrite からインポートされたルールは、Web サイトに対して標準のホスト名を強制できます。Apache mod_rewrite ルールのその他の例については、http://search.live.com/results.aspx?q=mod_rewrite+examples を参照してください。

免責事項

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

Apache mod_rewrite 構文を使用したルールだけを変換できます。書き換えルールのその他の形式 (ISAPI_Rewrite、Ionic ISAPI Rewrite、IISRewrite、その他) のいずれも、認識されず、また、正しく変換されません。