失敗した要求トレースを使用した書き換えルールの追跡
作成者 : Ruslan Yakushev
発行日 : 2008 年 5 月 28 日 (作業者 : ruslany(英語))
更新日 : 2008 年 9 月 11 日 (作業者 : ruslany(英語))
前提条件
このチュートリアルは、以下を前提としています。
- IIS 7.0 で ASP.NET 役割サービスおよび "トレース" 役割サービスが有効化されている。
- URL 書き換えの Go Live リリースがインストールされている。
テスト Web ページの設定
URL 書き換えモジュールがどのように機能するかを説明するために、簡単なテスト用 ASP.NET ページを使用します。このページでは、Web サーバー変数を読み取って、ブラウザーにそれらの値を出力します。
次の ASP.NET コードをコピーして、%SystemDrive%\inetpub\wwwroot\ フォルダーの article.aspx というファイルに貼り付けます。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
<h1>URL Rewrite Module Test Page</h1>
<table>
<tr>
<th>Server Variable</th>
<th>Value</th>
</tr>
<tr>
<td>Original URL: </td>
<td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
</tr>
<tr>
<td>Final URL: </td>
<td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
</tr>
</table>
</body>
</html>
このファイルをコピーした後で、https://localhost/article.aspx を参照して、ページがブラウザーに正しくレンダリングされたことを確認します。
書き換えルールの構成
%SystemDrive%\inetpub\wwwroot\ フォルダーに web.config ファイルを置きます。このファイルがない場合は作成します。web.config ファイルを開き、<system.webServer> 要素内に次のセクションを追加します。
<rewrite>
<rules>
<rule name="Fail bad requests">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Rewrite to article.aspx">
<match url="^article/([0-9]+)/([_0-9a-z-]+)" />
<action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" />
</rule>
</rules>
</rewrite>
- "Fail bad requests" ルールは、HTTP 要求のホスト ヘッダーが "localhost" でない場合に HTTP 接続を中止します。
- "Rewrite to article.aspx" ルールは、https://localhost/article/234/some-title の形式から https://localhost/article.aspx?id=234&title=some-title の形式に URL を書き換えます。
ブラウザーを開いて https://localhost/article/234/some-title を要求し、ルールが正しく構成されていることを確認します。ルールが正しく構成されていれば、ブラウザーに次のように表示されます。
失敗した要求トレースの構成
次に、"Default Web Site" で失敗した要求トレースを有効化します (失敗した要求トレースを有効化する手順については、「IIS7 の追跡機能を使用して失敗した要求をトラブルシューティングする」を参照してください)。失敗した要求トレースを有効化した後、URL 書き換えモジュール固有のイベントのトレース用に、失敗した要求トレース規則を作成します。
IIS マネージャーで失敗した要求トレース規則を作成するには、次の手順に従います。
[失敗した要求トレース規則] アイコンをダブルクリックすると、失敗した要求トレース規則のリストが表示されます。
[追加] アクションをクリックすると、失敗した要求トレース規則の作成ウィザードが表示されます。
ウィザードの最初のページで [すべてのコンテンツ (*)] を選択します。
[次へ] をクリックし、[状態コード] を「200-399」と指定します。
[次へ] をクリックし、[WWW Server] 以外のすべてのトレース プロバイダーのチェック ボックスをオフにします。また、[Rewrite] 以外のすべてのプロバイダー領域のチェックボックスをオフにします。
[終了] をクリックして、失敗した要求トレース規則を保存します。
URL 書き換えモジュールの後に、失敗した要求トレースをインストールした場合は、トレース プロバイダーの [Rewrite] 領域が無効になっている場合があります。[Rewrite] 領域が表示されない場合は、[プログラムの追加と削除] に移動し、URL 書き換えモジュール インストーラーを修復モードで実行します。
失敗した要求トレースのログ ファイル分析
失敗した要求トレース規則を作成した後、https://localhost/article/234/some-title を要求します。すると、%SystemDrive%\inetpub\Logs\FaileReqLogFiles\ に、失敗した要求トレースのログが作成されます。Internet Explorer でこのログを開くと、簡単に閲覧できる HTML ドキュメントとしてレンダリングされます。以下は、トレースのログ ファイルに表示される URL 書き換えに固有のイベントの例です。
これらのイベントは、書き換えルールがどのように評価されたか、および要求された URL が書き換えモジュールによってどのように変更されたかを表します。ルールの評価ロジックを理解するために、いくつかのイベントを見てみましょう。
URL_REWRITE_START- このイベントは、URL 書き換えイベントの開始を示します。イベントのプロパティには、次の情報が含まれています。
入力された URL 文字列は "/article/234/some-title" です。
クエリ文字列はありません。
Scope="Distributed" の部分は、ルールがローカル (つまり、ルールがサイトの Web.config で定義されている) であり、グローバル (つまり、サーバー レベルで定義されている) ではないことを示します。
RULE_EVALUATION_START - このイベントは、ルール評価ロジック の開始を示します。イベントのプロパティには、次の情報が含まれています。
ルールのパターン構文には正規表現を使用します (patternSyntax="ECMAScript")。
以降のルールが評価されます (StopProcessing="false")。
ルールは、サイトのルート レベルで定義されます (RelativePath = "/")。
PATTERN_MATCH - このイベントには、URL とルール パターン との一致方法に関する情報が含まれます。イベントのプロパティには、次の情報が含まれています。
ルール パターンは "." でした (つまり、任意の文字を一致させます)。
入力された URL は、パターンに正しく一致しました。
CONDITIONS_EVALUATION_START - 入力された URL がパターンに一致したため、条件の評価が開始されました。
CONDITION_EVALUATION- このイベントには、次の情報が含まれます。
HTTP_HOST の値は "localhost" で、パターンに一致しました。
ルールで否定条件 (Negated="true") が指定されていたため、条件の評価に失敗しました。
CONDITIONS_EVALUATION_END - このイベントは、このルールについて条件の評価が失敗したことを示します。
RULE_EVALUATION_END - このイベントは、ルールによって URL が変更されなかったことを示します (Succeeded="false")。これは、ルールの条件評価が失敗したためです。
RULE_EVALUATION_START - このイベントは、URL 文字列が 2 番目のルールに渡されたことを示します。
PATTERN_MATCH - このイベントには、URL とルール パターンとの一致方法に関する情報が含まれます。イベントのプロパティから、次のことがわかります。
ルール パターンは "^article/([0-9]+)/([0-9a-z]+)" でした。
入力された URL は、パターンに正しく一致しました。
REWRITE_ACTION - このイベントは、ルールの評価に成功 し、URL が、クエリ文字列 "id=234&title=some-title" を含む "/article.aspx" に書き換えられたことを示します。
まとめ
失敗した要求トレースによってログされる URL 書き換えに固有のイベントには、非常に詳細な情報が含まれており、URL 書き換えルールのトラブルシューティングやデバッグに使用できるほか、URL 文字列に対してルール評価ロジックがどのように適用されるかを理解することもできます。