2011年1月31日月曜日

URL Rewrite 2.0 でURLやサーバー変数を書き換える

今回はIIS7で、URLやサーバー変数を書き換える方法のメモです。
アプリケーション側の都合で構成を変えたいが、公開URLは変更したくない場合などに有効です。
Apacheのmod_rewriteと同じようなことができます。

導入は、Microsoft Web Platform Installer 3.0を使うのが簡単です。
ますは、こちらからインストールしてください。


[製品] - [サーバー] の中から、[URL Rewrite 2.0] を見つけて追加ボタンを押します。


その後、下部の[インストール]ボタンを押し、続けて同意ボタンを押し終わるのを待ちます。
場合によっては依存関係にあるモジュールも自動でインストールされます。

※ここでは詳しく説明しませんが、リバースプロキシを構築したい場合は
   ARR (Application Request Routing) モジュールも必要です。


インストールが完了したら、IISマネージャーを起動します。
Default Web Siteを選択すると、「URL 書き換え」という機能が追加されているのが分かります。
ダブルクリックするか、右上の[機能を開く]を選択して設定画面を出します。
(全てのサイトにURL書き換えルールを適用したくない場合は、目的の仮想ディレクトリに移動して、
URL書き換え設定画面を開いてください)


右上の[規則の追加]を選択します。


「空の規則」を選択してOKを押します。


この画面で書き換えルールを設定します。


[名前]
作成するルールに好きな名前を付けます

[URLの一致]
正規表現 or ワイルドカード or 完全一致した場合だけ書き換えることができます。
正規表現での指定がオススメです。括弧で括っておくと、書き換えルールで変数として使えます。

たとえば、「(.*)/(.*)/.*」とした場合、{R:n}を書き換えルールで使うことができます。

{R:0} これはURL全体を指します
{R:1} これは一番目の括弧でマッチした文字列になります
{R:2} これは二番目の括弧でマッチした文字列になります


サーバー変数だけで判断したい場合は、すべて(.*)にしておいて、[条件]で指定します。

[条件]
IISのサーバー変数に一致した場合のみ書き換えを行いたい時は、ここで条件指定します。
また、サーバー変数を書き換えルールに使いたい場合もここで指定します。
書き換えルールでの指定は{C:n}になります。

[サーバー変数]
サーバー変数の書き換えを行いたい場合はここで指定します。
事前に書き換えマップに書き換えたいサーバー変数を登録しておく必要がありますので
注意してください。(URL Rewrite設定画面Topの右側メニュー[書き換えマップの表示]から行います)

[アクション]
URLの書き換えルールを設定します。
前述の変数を利用して、http://{R:1}/{C:1}/index.htmlなどと動的な書き換えもできます。
サーバー変数の書き換えだけが目的の場合はアクションは「なし」にしておきます。

ルールの設定が完了したら、右上の適用ボタンを押して保存してください。
すぐにルールが反映されるはずです。(IISの再起動は不要)


【参考】
設定方法の詳細は、下記のTechNetのページが参考になると思います。

URL 書き換えモジュールの送信ルールの作成

HTTP 要求ヘッダーおよび IIS サーバー変数の設定 (サーバー変数を書き換えたい場合)

URL 書き換え Version 2 と Application Request Routing を使用したリバース プロキシ


【補足】
IIS6の場合はURL Rewrite 2.0は使えませんが、
IIRF (Ionic's Isapi Rewrite Filter) というツールを使うと、ほぼ同じことができます。