IIS 7.0 URL リライトモジュール (Rewrite Module)

先日インストールした Drupal を弄っているが、Drupal のサイトにアクセスする時の URI が http://host.domain.dom/index.php?q=aaa/bbb のようにクエリー文字列を使った表現になっている。
これを http://host.domain.dom/aaa/bbb のようなきれいな URI にしたいということで、IIS に URL Rewrite モジュールをインストールすることにした。

インストール方法については、「IIS 7.0 URL リライトモジュール (Rewrite Module) - Web/DB プログラミング徹底解説」に詳しく書いてあるので、省略する。

この記事を書いてる途中で、URL Rewrire モジュールのインストール方法が大きく変更されていることに気づいた。
いつの間にか、URL Rewrite やその他の IIS 用のモジュールを共通のインストーラーを使ってインストールする方式になっている。
IIS Extensions : The Official Microsoft IIS Site (英語)」の Web ページから、インストールしたいモジュールのひとつを選び、リンク先の指示に従って欲しい。

また、新しいインストール方法でインストールした URL Rewrite モジュールは、バージョンが 1.1 になっており表示が日本語化されている。
以下の記事中では、極力日本語化された表記を行うが、画像については英語のままであることに注意されたい。

インストールが終わったら IIS マネージャを開いて、「URL 書き換え」のアイコンが追加されていることを確認する。

image
IIS マネージャ - マシンホーム

これから URL Rewrite モジュールの設定を行うことになるが、どうやら URL Rewrite モジュールはサイトの各レベルに対して設定することができる。
つまり特定のサイトだけでなく、(複数のサイトを公開した) IIS 全体に対する設定や、仮想ディレクトリに対する設定をすることもできるということだ。
Apache の mod_rewrite モジュールでいうところの RewirteBase デレクティブが、暗黙に設定されているのと同じ動作になる。

とりあえず Drupal でクリーン URL を使用することが、この URL Rewrite モジュールをインストールした目的なので、そのつもりで設定を行うことにする。
Drupal は、IIS の仮想ディレクトリを使って /_drupal_ というパスで公開しているので、URL Rewrite モジュールの設定もこの仮想ディレクトリに対して行うようにする。
なお、Drupal のサイトはまだ評価中であるために、「IPv4 アドレスおよびドメインの制限」を使って、インターネットからこのパスはアクセスできないように制限してある。

image
IIS マネージャ - 仮想ディレクトリ

IIS マネージャの左側ペインのツリーで、Drupal を公開している仮想ディレクトリ _drupal_ を選択、中央のペインで「URL 書き換え」を選択して左側のペインにある「機能を開く」をクリックする。
「URL 書き換え」の構成が中央のペインに表示されるが、まだ何も設定してないのでここは空欄になる。

この状態で、左側ペインの「規則の追加...」をクリックして、規則を追加登録する。

image
URL Rewrite の構成

なお「規則の追加...」ではなく「規則のインポート...」を使って、Apache の mod_rewrite モジュールで使われる書式のファイルを直接読み込ませることもできる。
Drupal のクリーン URL で必要な書き換えルールはそんなに多くもないので、ここでは「規則の追加...」を使って手作業で登録することにする。

「規則の追加...」をクリックすると「規則の追加」ダイアログが表示される。

image
「規則の追加」ダイアログ

「規則の追加」ダイアログには、「空の規則、「ユーザー フレンドリ URL」、「書き換えマップ付き規則」、「要求ブロックと四つのテンプレートが表示されるが、それぞれの違いと使い道はよく分かっていない。
とりあえず目的を実現するには「空の規則」を選択して「OK」ボタンをクリックすれば良いことは分かった。

「規則の追加」ダイアログで「空の規則」を選択して「OK」ボタンをクリックすると、ダイアログが閉じ、IIS マネージャの中央ペインが「規則の編集」の表示になる。

ここでは Apache の mod_rewrite モジュールで使われる以下の設定を登録する。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

まずは「規則の編集」ペインの「名前」欄に、ここで作成して追加登録するルールの名称を入力する

「URL の一致」の枠内は、Apache の mod_rewite モジュールの RewriteRule 行のパターン部 (上記設定中の ^(.*)$ の箇所)  に対応する。
この「URL の一致」枠の「要求された URL」欄には「パターンに一致する」、「使用」欄には「正規表現」、「パターン」欄には「^(.*)$」と入力し、「大文字と小文字を区別しない」チェックボックスにチェックを入れる。

中程にある「条件」の枠内は、Apache の mod_rewrite モジュールの RewriteCond 行に対応する。
「条件」枠にある「論理グループ化」欄を「すべて一致」にして、必要な数の条件を「追加...」ボタンをクリックして追加登録する。

image
規則の編集
(前半部)

「条件」枠にある「追加...」ボタンをクリックすると、「条件の追加」ダイアログが表示される。
なお、すでに登録済みの条件を選択して「編集...」ボタンをクリックすると、「条件の編集」ダイアログが表示されるが、このダイアログは「条件の追加」ダイアログと全く同じ内容でキャプションが異なるだけだ。

「条件の追加」ダイアログの「条件の入力」欄には RewriteCond 行のテスト文字列部に相当する文字列を入力する。
上記設定の「RewriteCond %{REQUEST_FILENAME} !-f」であれば、「{REQUEST_FILENAME}」になる。
RewriteCond %{REQUEST_URI} !=/favicon.ico」なら、「{REQUEST_URI}」だ。

「入力文字列が次の条件を満たしているかどうかをチェック」欄は、RewriteCond 行の 条件パターンに相当する。
条件パターンが「!-f」や「!-d」のときは、それぞれ「ファイルではない」、「ディレクトリではない」にする。
当然だが、条件パターンが「-f」や「-d」のときは、「ファイルである」、「ディレクトリである」になる

条件パターンが「!=/favicon.ico」のように文字列との比較になっているときは、「パターンに一致しない」や「パターンに一致する」にして、比較パターンを「パターン」欄に入力する。
また、必要に応じて「大文字と小文字を区別しない」チェックボックスにチェックを入れる。

image image
「条件の追加」ダイアログ
(ファイル・ディレクトリの確認)
「条件の追加」ダイアログ
(文字列パターンの比較)


これを必要なだけ繰り返して「条件」枠内のリストに、RewriteCond 行の内容を入力する。

image
規則の編集
(コンディション追加直後)

「規則の編集」ペインの下部には「アクション」枠がある。
「アクション」の枠内は、Apache の mod_rewrite モジュールの RewriteRule 行の置換先に対応している。

「アクション」枠の「アクションの種類」欄は、「書き換え」、「リダイレクト」、「カスタム応答」、「要求中止」、「なし」が選択できるが、ここでは「書き換え」にする。
「アクション」枠内の「アクションのプロパティ」枠にある「URL の書き換え」欄には、RewriteRule 行の置換先をそのまま入力したいところだが、正規表現の後方参照の表記が Apache の mod_rewrite モジュールと異なるために、若干の修正が必要になる。
具体的にはApache の mod_rewrite モジュールで最初の部分一致文字列参照を表す $1 が、IIS の URI Rewrite モジュールでは {R:1} に、 二つ目の部分一致文字列参照を表す $2{R:2} になる。
つまり RewriteRule 行の置換先が「index.php?q=$1」のときは、「URL の書き換え」欄に「index.php?q={R:1}」を入力することになる。

また RewriteRule 行のフラグに「[L,QSA]」がついているので、「クエリ文字列の追加」 (フラグ QSA) と「後続の規則の処理を停止する」 (フラグ L) のそれぞれのチェックボックスにチェックをつける。

image image
規則の編集
(後半部)
「URL 書き換え」の構成
(規則登録済み)

すべての入力ができたら、右側ペインの上部にある「適用」をクリックして、規則を登録する。

URL Rewrite モジュールの設定に関する詳細な説明は「Creating rewrite rules for the URL Rewrite Module : Using URL Rewrite Module : Installing and Configuring IIS 7.0 : The Official Microsoft IIS Site (英語)」の Web ページを参照されたい。

関連記事

  • Drupal [Install Maniax 3]2010.3.1 (月) Drupal [Install Maniax 3] 疾うの以前に予選終了を迎え、決勝大会も終えてしまったインストールマニアックス 3 ではあるが、このためのサーバーとそれ以前のインストールマニアックス 2009 で建てたサーバーの 2 […]
  • IIS の ARR を使って Plone を呼び出す2010.2.25 (木) IIS の ARR を使って Plone を呼び出す いままでに「Plone を入れてみる」、「Plone のためのセキュリティが強化された Windows Firewall」、「IIS 7.5 でリバースプロキシを構成するための準備」と Plone […]
  • Drupal を弄ってみた [準備編]2009.10.6 (火) Drupal を弄ってみた [準備編] いままでに繰り返し記載しているとおり、このサイトは WordPress を使っている。 更に言えば、Web サーバーアプリケーションは IIS 7.0 であり、当然のことながら OS は Windows Server 2008 (正確には Windows […]
  • Drupal [Install Maniax 2009]2009.5.8 (金) Drupal [Install Maniax 2009] インストールマニアックスで、インストールする OSS のふたつ目は Drupal。 早速に Drupal の日本語サイトの中のダウンロードページ (2014.6.2 オリジナル ページが無くなったため Web Archive にリンク) […]

コメントを残す