先日インストールした 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 書き換え」のアイコンが追加されていることを確認する。
| IIS マネージャ – マシンホーム |
これから URL Rewrite モジュールの設定を行うことになるが、どうやら URL Rewrite モジュールはサイトの各レベルに対して設定することができる。
つまり特定のサイトだけでなく、(複数のサイトを公開した) IIS 全体に対する設定や、仮想ディレクトリに対する設定をすることもできるということだ。
Apache の mod_rewrite モジュールでいうところの RewirteBase デレクティブが、暗黙に設定されているのと同じ動作になる。
とりあえず Drupal でクリーン URL を使用することが、この URL Rewrite モジュールをインストールした目的なので、そのつもりで設定を行うことにする。
Drupal は、IIS の仮想ディレクトリを使って /_drupal_ というパスで公開しているので、URL Rewrite モジュールの設定もこの仮想ディレクトリに対して行うようにする。
なお、Drupal のサイトはまだ評価中であるために、「IPv4 アドレスおよびドメインの制限」を使って、インターネットからこのパスはアクセスできないように制限してある。
| IIS マネージャ – 仮想ディレクトリ |
IIS マネージャの左側ペインのツリーで、Drupal を公開している仮想ディレクトリ _drupal_ を選択、中央のペインで「URL 書き換え」を選択して左側のペインにある「機能を開く」をクリックする。
「URL 書き換え」の構成が中央のペインに表示されるが、まだ何も設定してないのでここは空欄になる。
この状態で、左側ペインの「規則の追加…」をクリックして、規則を追加登録する。
| URL Rewrite の構成 |
なお「規則の追加…」ではなく「規則のインポート…」を使って、Apache の mod_rewrite モジュールで使われる書式のファイルを直接読み込ませることもできる。
Drupal のクリーン URL で必要な書き換えルールはそんなに多くもないので、ここでは「規則の追加…」を使って手作業で登録することにする。
「規則の追加…」をクリックすると「規則の追加」ダイアログが表示される。
| 「規則の追加」ダイアログ |
「規則の追加」ダイアログには、「空の規則、「ユーザー フレンドリ 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 行に対応する。
「条件」枠にある「論理グループ化」欄を「すべて一致」にして、必要な数の条件を「追加…」ボタンをクリックして追加登録する。
| 規則の編集 (前半部) |
「条件」枠にある「追加…」ボタンをクリックすると、「条件の追加」ダイアログが表示される。
なお、すでに登録済みの条件を選択して「編集…」ボタンをクリックすると、「条件の編集」ダイアログが表示されるが、このダイアログは「条件の追加」ダイアログと全く同じ内容でキャプションが異なるだけだ。
「条件の追加」ダイアログの「条件の入力」欄には RewriteCond 行のテスト文字列部に相当する文字列を入力する。
上記設定の「RewriteCond %{REQUEST_FILENAME} !-f」であれば、「{REQUEST_FILENAME}」になる。
「RewriteCond %{REQUEST_URI} !=/favicon.ico」なら、「{REQUEST_URI}」だ。
「入力文字列が次の条件を満たしているかどうかをチェック」欄は、RewriteCond 行の 条件パターンに相当する。
条件パターンが「!-f」や「!-d」のときは、それぞれ「ファイルではない」、「ディレクトリではない」にする。
当然だが、条件パターンが「-f」や「-d」のときは、「ファイルである」、「ディレクトリである」になる
条件パターンが「!=/favicon.ico」のように文字列との比較になっているときは、「パターンに一致しない」や「パターンに一致する」にして、比較パターンを「パターン」欄に入力する。
また、必要に応じて「大文字と小文字を区別しない」チェックボックスにチェックを入れる。
| 「条件の追加」ダイアログ (ファイル・ディレクトリの確認) |
「条件の追加」ダイアログ (文字列パターンの比較) |
これを必要なだけ繰り返して「条件」枠内のリストに、RewriteCond 行の内容を入力する。
| 規則の編集 (コンディション追加直後) |
「規則の編集」ペインの下部には「アクション」枠がある。
「アクション」の枠内は、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) のそれぞれのチェックボックスにチェックをつける。
| 規則の編集 (後半部) |
「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 ページを参照されたい。
関連する記事 (Related posts):



最近のコメント