ドキュメントのこのセクションは、 IIS 7 の URL 書き換えモジュール バージョン 2.0 に適用されます。
このチュートリアルでは、URL 書き換えモジュール v 2.0 を使用して HTTP 要求ヘッダーと IIS サーバー変数を設定する方法について説明します。
前提条件
このチュートリアルでは、次の前提条件が必要です。
- ASP.NET ロール サービスが有効になっている IIS 7.0 以降
- インストールされている URL 書き換えモジュール 2.0
ウォークスルー シナリオの設定
URL 書き換えモジュール 2.0 を使用して HTTP ヘッダーと IIS サーバー変数を設定する方法を示すために、要求された URL に基づいて要求の HTTP Cookie ヘッダーが設定されるシナリオを実装します。 たとえば、ローカライズされた Web ページを提供する Web アプリケーションがあるとします。 Web アプリケーションは、要求の HTTP Cookie に基づいて応答の言語を決定します。 この方法の問題は、検索エンジンクローラーは HTTP Cookie を使用しないため、既定の言語のコンテンツのみが Web アプリケーションによって提供されるため、検索エンジンはこのアプリケーションのローカライズされたコンテンツのインデックスを作成しなくなります。 この問題を解決するには、URL の一部として言語に関する情報 ( http://www.contoso.com/default.aspxなど) を追加し、URL 書き換えモジュール 2.0 を使用して、応答の言語を決定するために Web アプリケーションが期待する Cookie を設定します。 さらに、最初に要求された URI 文字列を含む ORIGINAL_URI という名前の別のサーバー変数を設定します。
チュートリアル シナリオをセットアップするには、次の ASP.NET コードをコピーし、language.aspx という名前のファイル内の %SystemDrive%\inetpub\wwwroot\ フォルダーに配置します。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module v2 Test - Setting Server Variables</title>
</head>
<body>
<h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
<p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
<p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>
このファイルをコピーした後、 http://localhost/language.aspx を参照し、ページがブラウザーで正しくレンダリングされたことを確認します。
書き換えルールの作成
次の形式を使用して、URL を書き換える書き換えルールを作成します。
http://localhost/<language>/anyfile.aspx
は次のように書き換えられます。
http://localhost/anyfile.aspx
書き換えルールでは、次の 2 つの IIS サーバー変数も設定されます。
- HTTP_COOKIE
- ORIGINAL_URI
IIS マネージャーで URL 書き換え UI を使用して書き換えルールを作成します。
IIS マネージャーを開き、左側のツリー ビューで [既定の Web サイト] を選択し、[URL 書き換え] 機能を開きます。
サーバー変数の変更を許可する
既定では、分散書き換えルール (つまり、特定のサイトまたは Web アプリケーションに定義されている規則) は、サーバー変数が "許可" リストに追加されない限り、IIS サーバー変数を設定または変更できません。 このチュートリアルでは、次の 2 つのサーバー変数を "Allowed Server Variables" リストに追加する必要があります。
- HTTP_COOKIE
- ORIGINAL_URI
注
"許可されるサーバー変数" リストは、サーバー レベルで定義されているグローバルルールには適用されません。 グローバル書き換え規則を使用してサーバー変数が設定されている場合は、サーバー変数を "許可" リストに追加する必要はありません。
[View Server Variables...]\(サーバー変数の表示...\) を選択します。[アクション] ウィンドウのアクション:
"Add..." アクションを使用して、サーバー変数HTTP_COOKIE追加し、ORIGINAL_URIを "Allowed Server Variables" リストに追加します。
[許可されたサーバー変数] の一覧が更新されたら、[ルールに戻る] アクションをクリックして、ルールの一覧ビューに戻ります。
書き換えマップの定義
次の手順では、URL 部分のマップに使用される書き換えマップを定義します。これは、言語を、書き換えルールによって HTTP Cookie ヘッダーに保存されるロケール識別子に表します。
[書き換えマップの表示...] を選択します。[アクション] ウィンドウで次の操作を実行します。
[Add Rewrite Map...]\(書き換えマップの追加..\) をクリックします。マップの名前を "Languages" として指定します。
このマップでは、HTTP 要求 Cookie の設定時に使用する言語とロケール識別子を表す URL 部分間のマッピングが定義されます。 [マップ設定の編集]をクリックします。マッピングが見つからない場合に使用する既定値を指定するアクション。 既定値として「en_US」と入力します。
ダイアログを閉じてから、[マッピング エントリの追加...] を使用します。アクションを実行して、次のマッピングを追加します。
| 元の値: | 新しい値: |
|---|---|
| fr-fr | fr_FR |
| de-de | de_DE |
| ru-ru | ru_RU |
書き換えルールの定義
最後に、前に定義した書き換えマップを使用してサーバー変数を設定する書き換えルールを作成します。
メイン機能ビューの「ルールの追加...」アクションをクリックして、「受信ルール」カテゴリの「空のルール」を選択し、「ルールの編集」ダイアログを表示します。 次のようにルールの構成を入力します。
ルール名: "サーバー変数の設定"
要求された URL: "パターンに一致する"
使用: "正規表現"
パターン: "^([a-z]{2}-[a-z]{2})/(.*)"
条件:
- 入力: "{Languages:{R:1}}"
- 型: "パターンに一致する"
- パターン: "(.+)"
アクション:
- 種類: "Rewrite"
- 書き換え URL: "{R:2}"
ルールのパターンは、言語セグメント (たとえば、 http://www.contoso.com/de-de/default.aspx) を含む任意の URL パスと一致します。 また、ルールの後で再利用できるように、言語セグメントと、ルールのバックリファレンスの URL パスの残りの部分もキャプチャします。 ルール条件では、以前にキャプチャした言語セグメントが、書き換えマップ "言語" に渡される参照キーとして使用されます。 マップ参照の結果は、条件のバックリファレンスに格納されます。 ルール アクションは、URL を書き換えて言語セグメントを含めないようにします。
[サーバー変数...] を展開します。サーバー変数の設定に使用する値を指定します。
- 名前: HTTP_COOKIE、値: Language={C:1}
- 名前: ORIGINAL_URI、値: http://{HTTP_HOST}{REQUEST_URI}
HTTP Cookie は、"Languages" 書き換えマップから取得したロケール識別子を含む条件バックリファレンスを使用して設定されます。 ORIGINAL_URI サーバー変数の値は、{HTTP_HOST} サーバー変数と {REQUEST_URI} サーバー変数を使用して作成されます。
[OK] をクリックしてダイアログを閉じ、右側の [操作] ウィンドウで [適用] をクリックしてルールを保存します。
ルールのテスト
規則によって Cookie とサーバー変数が正しく設定されていることをテストするには、Web ブラウザーを開き、次の URL を要求します。
http://localhost/fr-fr/language.aspx
書き換えルールによって、要求された URL に従って "Language" Cookie が設定されていることがわかります。 また、"ORIGINAL_URI" サーバー変数を使用して、ASP.NET ページに対して元の URL 文字列にアクセスできます。