HTTP 要求ヘッダーと IIS サーバー変数の設定

Ruslan Yakushev

ドキュメントのこのセクションは、URL Rewrite Module Version 2.0 for IIS 7 に適用されます。

このチュートリアルでは、URL Rewrite Module v 2.0 を使用して HTTP 要求ヘッダーと IIS サーバー変数を設定する方法を説明します。

前提条件

このチュートリアルでは、次の前提条件が必要です。

  1. ASP.NET 役割サービスが有効になっている IIS 7.0 以降
  2. URL Rewrite Module 2.0 がインストールされていること

チュートリアル シナリオの設定

URL Rewrite Module 2.0 を使用して HTTP ヘッダーと IIS サーバー変数を設定する方法を示すために、要求された URL に基づいて要求の HTTP Cookie ヘッダーが設定されるシナリオを実装します。 たとえば、ローカライズされた Web ページを提供する Web アプリケーションがあるとします。 その Web アプリケーションでは、要求の HTTP Cookie に基づいて応答の言語が決定されます。 このアプローチの問題は、検索エンジンによってこのアプリケーションのローカライズされたコンテンツのインデックスが作成されないことです。これは、検索エンジン クローラーでは HTTP Cookie が使用されないため、この Web アプリケーションでは、既定の言語のコンテンツのみが提供されるためです。 この問題を解決するために、言語に関する情報を URL の一部として追加し (例: http://www.contoso.com/default.aspx)、次に URL Rewrite Module 2.0 を使用して Web アプリケーションが応答の言語を決定するために想定している Cookie を設定することにしました。 さらに、最初に要求された URI 文字列を含む ORIGINAL_URI という別のサーバー変数を設定する必要があります。

チュートリアル シナリオをセットアップするには、次の ASP.NET コードをコピーし、%SystemDrive%\inetpub\wwwroot\ フォルダー内の language.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 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 Rewrite UI を使用して書き換えルールを作成します。

IIS マネージャーを開き、左側のツリー ビューで [既定の Web サイト] を選び、[URL Rewrite] 機能を開きます。

Screenshot of the I I S Manager's Default Web Site Home screen with a focus on the U R L Rewrite option.

サーバー変数の変更を許可する

既定では、分散書き換えルール (つまり、特定のサイトまたは Web アプリケーションに対して定義されたルール) で、IIS サーバー変数を設定または変更するには、そのサーバー変数を "許可" リストに追加する必要があります。 このチュートリアルでは、次の 2 つのサーバー変数を "許可されるサーバー変数" リストに追加する必要があります。

  • HTTP_COOKIE
  • ORIGINAL_URI

Note

"許可されるサーバー変数" リストは、サーバー レベルで定義されているグローバル ルールには適用されません。 サーバー変数がグローバル書き換えルールを使用して設定されている場合は、そのサーバー変数を "許可" リストに追加する必要はありません。

[アクション] ペインから [サーバー変数の表示] アクションを選びます。

Screenshot of the U R L Rewrite screen with a focus on the View Server Variables option in the Actions pane.

[追加] アクションを使用して、サーバー変数 HTTP_COOKIE と ORIGINAL_URI を "許可されるサーバー変数" リストに追加します。

Screenshot of the Add Server Variable dialog box with ORIGINAL underscore U R I entered as the Server variable name.

"許可されるサーバー変数" リストが更新されたら、[ルールに戻る] アクションをクリックして、ルールのリスト ビューに戻ります。

書き換えマップの定義

次のステップは、言語を表す URL の部分を、書き換えルールによって HTTP Cookie ヘッダーに保存されるロケール識別子にマップするために使用される書き換えマップを定義することです。

[アクション] ペインで [書き換えマップの表示] アクションを選びます。

Screenshot of the U R L Rewrite screen with a focus on the View Rewrite Maps option in the Actions pane.

[書き換えマップの追加] をクリックし、マップの名前を "Languages" として指定します。

Screenshot of the Add Rewrite Map dialog box with Languages entered as the Rewrite map name.

このマップは、言語を表す URL 部分と、HTTP 要求 Cookie を設定するときに使用されるロケール識別子との間のマッピングを定義します。 [マップ設定の編集] アクションをクリックし、マッピングが見つからない場合に使用する既定値を指定します。 既定値として「en_US」を入力します。

Screenshot of the Edit Rewrite Map dialog box showing E N underscore U S as the default value to use when the key is not found in the map.

ダイアログを閉じてから、[マッピング エントリの追加] アクションを使用して、次のマッピングを追加します。

元の値: 新しい値:
fr-fr fr_FR
de-de de_DE
ru-ru ru_RU

書き換えマップの定義

最後に、前に定義した書き換えマップを使用してサーバー変数を設定する書き換えルールを作成します。

メインの機能ビューで [ルールの追加] アクションをクリックし、[受信規則] カテゴリから [空のルール] を選択して、[ルールの編集] ダイアログを表示します。 次のようにルールの構成を入力します。

Screenshot of the Edit Inbound Rule screen showing the Name, Match U R L, Conditions, Server Variables, and Actions sections.

  • ルール名: "サーバー変数の設定"

  • 要求された URL: "パターンに一致する"

  • 使用: "正規表現"

  • パターン: "^([a-z]{2}-[a-z]{2})/(.*)"

  • 条件:

    • 入力: "{Languages:{R:1}}"
    • 型: "パターンに一致する"
    • パターン: "(.+)"
  • アクション:

    • 型: "書き換え"
    • 書き換え URL: "{R:2}"

ルールのパターンは、言語セグメントを含む任意の URL パス (例: http://www.contoso.com/de-de/default.aspx) と一致します。 また、言語セグメントとルールの前方参照内の URL パスの残りの部分もキャプチャされるため、後からルール内で再利用できます。 ルール条件では、以前にキャプチャした言語セグメントが、書き換えマップ "Languages" に渡される検索キーとして使用されます。 マップ検索の結果は、条件の前方参照に格納されます。 ルール アクションは、言語セグメントが含まれないように URL を書き換えます。

[サーバー変数] を展開し、サーバー変数の設定に使用する値を指定します。

Screenshot of the Server Variables dialog box with H T T P underscore COOKIE and ORIGINAL underscore U R L entered in the Name field.

  • 名前: 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

Screenshot of the U R L Rewrite Module v 2 Test webpage with focus on the U R L bar, the Language cookie is set to F R underscore F R.

書き換えルールによって、"Language" Cookie が要求された URL に従って 設定されていることがわかります。 また、元の URL 文字列は、 "ORIGINAL_URI" サーバー変数を介して ASP.NET ページでアクセスできるようになっています。