URLParamFilter Version 1.2 フィルタデータ仕様

DOCUMENT

IIS で GET メソッドの引数ではなく URL 自体に値を持たせることを可能にするための ISAPI フィルタです。

URL の文字数制限も可能です。


フィルタデータ仕様

はじめに

注意事項

フィルタデータは大文字と小文字を区別します。

つまり index.asp と index.ASP は別物です。VirtualPoint や AcceptType を指定する場合には特に気をつけましょう。

 

フィルタデータ項目

項目一覧

Identifier フィルタの固有名です。URLPARAM-ID ヘッダに反映されます。省略可能です。
VirtualPoint URL フィルタリングを行う条件です。ワイルドカードが利用できます。
RealPoint 変換後の URL です。フィルタリングがなされた場合、この URL の内容を表示するようにします。
SpecialValue URLPARAM-SPECIAL に反映されます。省略可能です。
Separator TARGET を分離するための文字です。最初の1文字のみが有効です。省略すると TARGET の値は分離されません。
AcceptType フィルタリングを許可する拡張子です。
ModeOption フィルタリングの挙動を調整するオプションです。

 

フィルタデータの形式

Type = 0 : テキストファイル

ASCII テキストのみのカンマ区切りです。空行をあけることも可能です。

ただし % 記号は特別扱いで、それ以降の2文字を16進数2桁の ASCII コードととらえて、それが意味する文字に変換します。

また、行の一番ひだりの文字が "#" であった場合にはその行はコメントとして処理されます。また、1行が空行である場合も無視されます。

行末はいわゆる "\n" です。上から順に参照され、適用できるフィルタが見つかった時点で照査を終了します。

 

各項目を一行カンマ区切りで、次の順番で記載します。

1 Identifier
2 VirtualPoint
3 RealPoint
4 AcceptType
5 Separator
6 SpecialValue
7 ModeOption

 

カンマをデータに含めたい場合には、%2C というように % からはじめた16進数2桁で ASCII コードを指定します。

 

フィルタデータ項目の詳細

IDENTIFIER

フィルタデータにつけるラベルです。

主にどのフィルタデータが適用されたかを知るために使用するものです。必須ではないので省略も可能です。

 

VirtualPoint

URLParamFilter に変換を依頼する URL です。

スラッシュ ( / ) から始まる絶対アドレスで記述します。最後も基本的にスラッシュで終了させますが、そうでなくても一応は大丈夫です。

 

要求された URL の先頭部分と VirtualPoint がマッチした (一致した) 場合に、URL を RealPoint に置き換えます。

ただし例外的に /** で終わる URL を指定した場合は、VirtualPoint にマッチした URL 以降、つまり要求 URL から VirtualPoint を除いた残りの部分が、RealPoint で指定した URL の後ろに追加されます。

また、ここでは * や ? といったワイルドカードが利用できます。

 

RealPoint

要求された URL が VirtualPoint にマッチした場合に、元の URL を置き換える URL です。

基本的にはここで指定した URL そのものに置き換えますが、VirtualPoint の文末で /** を指定した場合には、マッチした残りの部分が RealPoint に追加された形で置き換わります。

 

AcceptType

フィルタ処理を適用する拡張子を指定します。

設定 意味
* 全ての拡張子に有効です。ただし / で終わる URL やファイル名のみで拡張子のないものには無効です。
/ / で終わる、つまりディレクトリ指定で終わる URL に有効です。
【それ以外】 ここに指定された文字列と同一の拡張子に有効です。

 

基本的にここに記載できる拡張子はひとつだけですが、* を指定することで、全ての拡張子という意味になります。

ただし、* を指定した場合でも、拡張子なしの URL 要求の場合にはフィルタ処理がマッチしません。

拡張子なしの URL をマッチさせる場合には、ここの値を省略します。また、この場合でもスラッシュ ( / ) で終わる URL にはマッチしません。これにはスラッシュを指定することで対応します。

 

Separator

TARGET に、すなわち URL のファイル名に指定されている部分を分割するために使用します。

要求された URL に VirtualPoint がマッチした場合、ここに指定した文字の先頭1文字を使ってファイル名を分割します。ここになにも指定していない場合や、一致する文字がない場合は分割されません。

分割された内容は URLPARAM-TARGET 環境変数にカンマ区切りで保存されます。

 

SpecialValue

フィルタデータにつける、特別な値です。Identifier のようにマッチしたデータを知るために使用します。

基本的には Identifier と同様の役割を果たしますが、一応、Identifier はフィルタの識別 (同種判定) 用なのに対し、こちらは同種フィルタでの固有値 (引数) 的な役割です。

もっとも、意味づけの問題であり、プログラム的には変わりません。

 

ModeOption

フィルタ処理の挙動を決めるオプションです。

 

【Enable Wide Point】 ModeOption = 0:の場合は冗長を許可します。

その場合は URL に現れるファイル名が、VirtualPoint と同一階層になくてもマッチ可能です。その場合、VirtualPoint 以降でファイル名の前までに現れるディレクトリ名が、URLPARAM-OPTIONS 環境変数に保存されます。

 

【Request Same Point】 ModeOption = 1 の場合は冗長性を許可しません。

その場合は VirtualPoint で指定されたのと同一階層の URL 要求しかマッチしません。これとワイルドカードを組み合わせることで、意図した階層の URL をコントロールすることができます。

 

ワイルドカード

アスタリスク - "*"

任意のディレクトリ名を意味します。

/aaa/*/bbb/ というように使うことによって、aaa と bbb の間にどんなディレクトリが入ってもいいということを意味します。

変則的に /abc*/ というような使い方も可能です。この場合は abc から始まる名前のディレクトリが許されます。ただし、逆に /*abc/ というような記載はできません。

このワイルドカードにマッチしたディレクトリ名が、URLPARAM-OPTIONS に記録されます。

 

クエスチョンマーク - "?"

任意の1文字を意味します。

/aa?/ というように使用することで、/aaa/ とか /aab/ とかいった出ディレクトリ名にマッチします。これは /a?a/ というように間に使用したり、/a????a/ というように連続して使用したりできます。

このワイルドカードにマッチした文字列が URLPARAM-OPTIONS に記録されますが、連続した ?????? にマッチした文字列は、連続した1つの文字列として記録されます。

つまり /a?a?/ とすると、? に対応するそれぞれ1文字が2つ記録されますが、/a??a/ のような場合は ?? に対応する2文字が1つ記録されます。

 

 二重アスタリスク - "**"

特殊な役目をもったワイルドカードです。

通常は /sub/** というように VirtualPoint の末尾で使用します。** が現れた時点で、要求された URL のそれ以降に対応する部分が、RealPoint の末尾に追加されます。

つまり、VirtualPoint = /latest/** で、RealPoint = /v1.1/ としたときに、/latest/document/index.html を要求すると、** に対応する document/index.html が RealPoint に付加されて、/v1.1/document/index.html が実際に要求される URL になります。

 

このワイルドカードは、その後も通常通りのフィルタ処理を続けますので、VirtualPoint の文末ではなく間に使うことも可能です。

** が現れた時点で RealPoint に情報を追加するだけですので、走査位置に影響はありません。ですので、/aa/**bb/ は /aa/bb/ と同じ意味になります。ただし、** が現れた時点で、RealPoint にその時点での残りの URL が追記されるという副作用は持ちますが。

 

また、2つ以上使用することも可能ですが、その場合、** が現れるたびに、それ以降に対応する URL が RealPoint に追加されますので、よほど工夫をしないと役には立たないでしょう。

 

フィルタデータを有効にする

フィルタ設定を変更した場合、特に IIS を再起動しなくてもすぐに新しい情報が反映されます。