HTTP 要求ヘッダーおよび IIS サーバー変数の設定

公開日: 2009 年 9 月 24 日 (作業者: ruslany (英語))

更新日: 2009 年 9 月 24 日 (作業者: ruslany (英語))

必要条件

このチュートリアルの必要条件は次のとおりです。

  1. ASP.NET 役割サービスを含む IIS 7.0 が有効になっている
  2. URL 書き換えモジュール 2.0 がインストールされている

チュートリアル シナリオのセットアップ

URL 書き換えモジュール 2.0 を使用して HTTP 要求ヘッダーおよび IIS サーバー変数を設定する方法について説明するために、要求された URL に基づき要求の HTTP Cookie ヘッダーを設定するシナリオを実装します。 たとえば、ローカライズされた Web ページを提供する Web アプリケーションがあるとします。 この Web アプリケーションでは、要求の HTTP Cookie に基づき応答の言語が決定されます。 この方法の問題点は、このアプリケーションのローカライズされたコンテンツのインデックスが検索エンジンで作成されないことです。原因は、検索エンジン クローラーでは HTTP Cookie を使用しないため、Web アプリケーションにより既定の言語のコンテンツのみが提供されることです。 この問題を解決するために、https://www.contoso.com/en-us/default.aspx など、URL の一部に言語に関する情報を追加します。次に、応答の言語を決定するために、URL 書き換えモジュール 2.0 を使用して、Web アプリケーションによって想定される Cookie を設定します。 また、最初に要求した URL 文字列を含む 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>

このファイルをコピーしたら、https://localhost/language.aspx を参照し、ページがブラウザーで正しくレンダリングされていることを確認します。

書き換えルールを作成する

以下の形式を使用して、URL を書き換える書き換えルールを作成します。

https://localhost/<言語>/anyfile.aspx
上記の URL は以下のように書き換えられます。
https://localhost/anyfile.aspx

また、書き換えルールにより、以下の 2 つの IIS サーバー変数が設定されます。

  • HTTP_COOKIE
  • ORIGINAL_URI

書き換えルールは、IIS マネージャーの URL 書き換えの UI を使用して作成します。

IIS マネージャーを開き、左側のツリー ビューで [Default Web Site] を選択し、[URL 書き換え] 機能を開きます。

Ee886301.URLRewriteIcon2(ja-jp,TechNet.10).png

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

既定では、分散書き換えルール (特定のサイトまたは Web アプリケーション用に定義されたルール) は、サーバー変数が [許可] の一覧に追加されない限り、IIS サーバー変数を設定したり、変更したりできません。 このチュートリアルでは、以下の 2 つのサーバー変数を [許可するサーバー変数] の一覧に追加する必要があります。

  • HTTP_COOKIE
  • ORIGINAL_URI

メモ: [許可するサーバー変数] の一覧は、サーバー レベルで定義されるグローバル ルールには適用されません。 グローバル書き換えルールを使用してサーバー変数を設定している場合は、サーバー変数を [許可] の一覧に追加する必要はありません。

[操作] ウィンドウから、[サーバー変数の表示...] 操作を選択します。

Ee886301.OpenServerVars(ja-jp,TechNet.10).png

[追加...] 操作を使用して、サーバー変数の HTTP_COOKIE と ORIGINAL_URI を [許可するサーバー変数] の一覧に追加します。

Ee886301.AddServerVars(ja-jp,TechNet.10).png

[許可するサーバー変数] の一覧が更新されたら、[規則に戻る] 操作をクリックして、規則の一覧表示に戻ります。

書き換えマップを定義する

次の手順では、言語を示す URL の一部を、書き換えルールによって HTTP Cookie ヘッダーに保存されるロケール識別子にマッピングするために使用する書き換えマップを定義します。

[操作] ウィンドウで、[書き換えマップの表示...] 操作を選択します。

Ee886301.ViewRewriteMaps(ja-jp,TechNet.10).png

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

Ee886301.AddRewriteMap(ja-jp,TechNet.10).png

このマップにより、言語を示す URL の一部と HTTP 要求 Cookie の設定時に使用されるロケール識別子とのマッピングが定義されます。 [マップ設定の編集...] 操作をクリックして、マッピングが見つからなかった場合に使用する既定値を指定します。 既定値に「ja_JP」と入力します。

Ee886301.MapDefaultValue(ja-jp,TechNet.10).png

ダイアログを閉じ、[マッピング エントリの追加...] 操作をクリックして、以下のマッピングを追加します。

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

書き換えルールを定義する

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

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

Ee886301.ServerVarsRewriteRule2(ja-jp,TechNet.10).png

  • [規則名:] 「サーバー変数の設定
  • [要求 URL:] 「パターンに一致する
  • [使用:] 「正規表現
  • [パターン:] 「^([a-z]{2}-[a-z]{2})/(.*)
  • [条件:]
    • [入力:] 「{Languages:{R:1}」
      The
    • [種類:] 「パターンに一致する」
    • [パターン:] 「(.+)」
  • [アクション:]
    • [種類:] 「書き換え」
    • [URL 書き換え:] 「{R:2}」

ルールのパターンにより、言語セグメントが含まれているすべての URL パス (たとえば、"https://www.contoso.com/de-de/default.aspx") が照合されます。 また、後でルールで使用できるように、ルールの逆参照で言語セグメントおよび URL パスの残りの部分をキャプチャします。 ルールの条件では、以前にキャプチャした言語セグメントを、書き換えマップ "Languages" に渡される参照キーとして使用します。 マップ参照の結果は、条件の逆参照に保存されます。 ルール アクションにより、その言語セグメントを含まないように URL を書き換えます。

[サーバー変数...] をクリックして、サーバー変数の設定に使用する値を指定します。

Ee886301.ServerVarsDialog1(ja-jp,TechNet.10).png

  • [名前]: 「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 を要求します。

https://localhost/fr-fr/language.aspx

Ee886301.TestServerVars(ja-jp,TechNet.10).png

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

関連コンテンツ

記事