コンテンツルール

概要

x-Servletはあらかじめ設定された端末グループからのアクセスに対して、下記のような動作をさせる事ができます。

  • 指定したコンテンツへ振り分ける(デフォルトモード)
  • 無変換のレスポンスを返す(スルーモード)
  • リダイレクトさせる(リダイレクトモード)

これらのルールを設定することで、より最適なコンテンツを提供することが可能となります。
例えば、Flash対応の端末はFlashを使用したコンテンツを表示させたり、PCからのアクセスはエラーページへ誘導することなどができます。具体例につきましては振り分け・非変換を参考にしてください。

またそれぞれのモードの詳細ついてはコンテンツルールのモードをご覧ください。

ここでは携帯からのリクエストがあった時、どのようにそれぞれのルールに振り分けられるかをご説明します。

基本動作

x-Servletは端末からアクセスがあったとき、下記の動作を行ないます。
  1. リクエストおよび機種情報と、contentsRule.xmlに設定されているルールとを比較します。
  2. コンテンツルールが複数登録されている場合、比較は上に書かれているコンテンツルールから順におこなわれます。
  3. 該当するコンテンツルールがあった場合はそのコンテンツルールに従い、Webサーバに対して設定されているリクエストを送信するかリダイレクトを行います。

ルールの選択について

携帯からのリクエストがいずれのルールに該当するかを判別するとき、x-Servletは下記の通りに比較します。

まず、携帯から来たリクエストは
  http://[ホスト名]:[ポート名]/[ディレクトリ名]/[ファイル名]?[パラメータ名]
という部分に分けられるものと考えます。

例えば、
  http://x-servlet.com/dir1/dir2/dir3/file.html?1=foo&2=bar
の場合は下記となります。

[ホスト名] → x-servlet.com
[ポート名] → 80 (指定が無いのでデフォルトのポート番号である80番が指定されているものとみなします)
[ディレクトリ名] → /dir1/dir2/dir3
[ファイル名] → file.html
[パラメータ名] → 1=foo&2=bar


x-Servletはリクエストのそれぞれの部分に対して、contentsRule.xmlに設定されたコンテンツルールと比較を行ないます。
下記の項目が<ContentsRule>もしくは<RedirectRule>に囲まれて一つのコンテンツルールとなっています。
  • <ConditionHost>
    [ホスト名]と比較します。大文字小文字は区別されません。
  • <ConditionPort>
    [ポート名]と比較します。
  • <ConditionDir>
    [ディレクトリ名]と前方一致比較を行います。大文字小文字を区別します。
  • <ConditionFile>
    [ファイル名]と比較します。大文字小文字を区別します。
    完全一致だけではなく「XXX*(前方一致)」、「*XXX(後方一致)」、「*XXX*(部分一致)」でも指定可能です。
    ただし「XX*YY」というように「*」が文字列の途中に現われるような表現には対応していません。
    リダイレクトモードでのみで指定可能です。
  • <ConditionUAGroup>
    UAGroupSetting.xmlで設定した端末グループを指定します。
    設定されているグループに "caseSensitive"属性が指定されている場合は大文字小文字を区別します。 指定されていない場合、大文字小文字は区別されません。 リクエストを行った端末がここで指定した端末グループに含まれているかどうかを調べます。
    端末グループ名の先頭に「!」をつけることで端末グループの否定を表現することが可能です。
    また「,」で複数の端末グループ名を指定することができます。この場合、リクエストを行った端末がここで列挙された端末グループ名のいずれかに含まれている場合にはこの条件に適合したものとみなします。

比較は上にあるコンテンツルールから順に行なわれ、全ての要素が合致したコンテンツルールを選択します。
その後、選択したコンテンツルール内の<Scheme>タグや<Host>タグなどに設定されている通りにリクエスト変換し、Webサーバに対してリクエストを送信します。

コンテンツルールの設定例

コンテンツルールでリクエストを判別するタグについて、設定例をいくつか記載します。

例1)
contentsRule.xml

<ContentsRule>
  <ConditionHost></ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir></ConditionDir>
  <ConditionUAGroup></ConditionUAGroup>
      ・・・
</ContentsRule>

この場合、全てのリクエストがこのルールに該当します。

例2)
contentsRule.xml

<ContentsRule>
  <ConditionHost>x-servlet.com</ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir></ConditionDir>
      ・・・
</ContentsRule>

このルールに該当するリクエストです。

  • http://x-servlet.com/top.html
  • http://x-servlet.com:8000/demo/top.html

以下のリクエストはこのルールに該当しません。

  • http://x-servlet.co.jp/top.html
  • http://x-servlet.net/top.html

例3)
contentsRule.xml

<ContentsRule>
  <ConditionHost></ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir>/test</ConditionDir>
      ・・・
</ContentsRule>

このルールに該当するリクエストです。

  • http://x-servlet.co.jp/test/top.html
  • http://x-servlet.com:8000/test/top.html
  • http://ksk.co.jp/test/dir/file.html
  • http://ksk.co.jp/test/

以下のリクエストはこのルールに該当しません。

  • http://x-servlet.com/top.html
  • http://x-servlet.com/demo/top.html
  • http://x-servlet.com/test2/top.html
  • http://ksk.co.jp/test''

例4)
contentsRule.xml

<ContentsRule>
  <ConditionHost></ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir></ConditionDir>
  <ConditionUAGroup>CHTML,!PC</ConditionUAGroup>
      ・・・
</ContentsRule>

このルールに該当するリクエストです。

  • iモード端末からのリクエスト
  • PCブラウザ以外からのリクエスト

例5)
contentsRule.xml

<!--ルール1-->
<ContentsRule>
  <ConditionHost>x-servlet.com</ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir>/test</ConditionDir>
  <ConditionUAGroup></ConditionUAGroup>
      ・・・
</ContentsRule>

<!--ルール2-->
<ContentsRule>
  <ConditionHost></ConditionHost>
  <ConditionPort></ConditionPort>
  <ConditionDir>/test</ConditionDir>
  <ConditionUAGroup></ConditionUAGroup>
      ・・・
</ContentsRule>

コンテンツルールの上から順に比較していくため、以下のリクエストは「ルール1」にマッチします。

  • http://x-servlet.com/test/top.html
TOP