Guideman

INDEX

Guidemanとは?

GuidemanはHTTPアクセスを操作するためのISAPI Filterです。

以下のようなことが可能です。

動作環境
IIS 5.0, 5.1, 6.0 and 7
パッケージ内容
Guideman.dll
ISAPI Filter本体
Guideman.setting
設定ファイル
注意事項
  1. 本ソフトウェアの利用は良識の範囲内でお願い致します。
  2. 本ソフトウェアの利用による損害の保証はお受けできません。
  3. 本ソフトウェアの利用は楽しんで行っていただきますようお願い致します。
インストール方法
  1. "Guideman.setting" を目的の設定に編集。
  2. "Guideman.dll" を目的のWebサイトのISAPIフィルタに設定。
設定ファイルの書き方

設定ファイルはXMLで記述してください。

<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/member/.*"> <actionif sv="HTTPS" match="off"/> <redirect location="https://%{HTTP_HOST}${0}"/> </guide> <guide url="/.*"> <actionif sv="HTTPS" match="on"/> <redirect location="http://%{HTTP_HOST}${0}"/> </guide> </guidebook> <guidebook> <guide url="/(.+)/(.+)\.html"> <setheader name="url" value="/dispatch.asp?p1=${1}&amp;p2=${2}"/> </guide> </guidebook> </guideman>
説明
  • "/member/" 配下へアクセスに反応し、HTTPSがoffだったらhttpsで来るようにリダイレクト。
  • "/" 配下へのアクセスに反応し、HTTPSがonだったらhttpで来るようにリダイレクト。
  • "/aaa/bbb.html" のようなアクセスに反応し、"dispatch.asp?p1=aaa&p2=bbb" へのアクセスに置き換える。
設定リファレンス
<guideman/>

Guideman設定のルート要素。

属性
reloadkey

設定ファイルをリロードする際のキー。
文字 '/' から始まる文字列を指定して下さい。
キーはばれないよう、複雑なものにして下さい。
キーを指定しない場合、もしくは空文字列の場合は設定ファイルのリロードはできません。

<?xml version="1.0" encoding="UTF-8"?> <guideman reloadkey="/soeu73nc70zzz"> ... </guideman>
説明
設定ファイルを変更した際、
http://yourhostname/soeu73nc70zzz
にアクセスすることで設定をリロードできます。
子要素
  • <guidebook/>
<guidebook/>

<guide/>のセット。
<guidebook/>内の<guide/>は上から順に走査され、url がマッチした時点で走査を終了し、
現在の<guidebook/>から抜けて次の<guidebook/>に入ります。

属性
[なし]
子要素
  • <guide/>
<guide/>

反応する条件と反応した際の処理のセット。
アクセスしてきたURLとurl(属性)がマッチした際にアクション(<redirect/>, <setheader/>)を実行します。
その際、すべての<actionif/>が評価され、すべて True の場合のみアクションが実行されます。

属性
url

アクセスしてきたURLに反応したい正規表現。
正規表現はPerl互換(Boost.Regex Perl Regular Expression Syntax)で記述して下さい。
正規表現にサブマッチを利用した場合にはアクションで置換に利用することができます。

<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/(.+)/(.+)\.html"> <setheader name="url" value="/dispatch.asp?p1=${1}&amp;p2=${2}"/> </guide> </guidebook> </guideman>
説明
以下のようなアクセス、
http://yourhostname/abc/xyz.html
をすると、IISで内部的に
/dispatch.asp?p1=abc&amp;p2=xyz
へアクセスしたことになります。
or="or"

すべての <actionif/> の評価をORで行います。
指定しない場合はANDです。

<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/.*" or="or"> <actionif sv="HTTP_USER_AGENT" match=".*Opera.*"/> <actionif sv="HTTP_USER_AGENT" match=".*Firefox.*"/> <setheader name="url" value="/pleaseIE.html"/> </guide> </guidebook> </guideman>
説明
ブラウザのユーザーエージェントがOperaかFirefoxの場合には、
/pleaseIE.html
へアクセスしたことになります。
子要素
  • <actionif/>
  • <redirect/>
  • <setheader/>
<actionif/>

アクションを実行すべきかどうかの条件。
<actionif/>が複数ある場合にはすべてが True の場合のみアクションが実行されます。
ただし、<guide/>に or="or" が指定されている場合にはどれか1つが True の場合にアクションが実行されます。
例は <redirect/> の例をご覧下さい。

属性
sv

ServerVariable名。
以下のServerVariableが利用可能です。

HTTPS
"on", "off"
LOCAL_ADDR
"192.168.0.1", ... (サーバーのIPアドレス)
REMOTE_ADDR
"192.168.0.21", ... (クライアントのIPアドレス)
SERVER_NAME
"www.arudomain.jp", ...
SERVER_PORT
"80", "443", ...
SERVER_PORT_SECURE
"0", "1"
SERVER_PROTOCOL
"HTTP/1.1", ...
HTTP_*
クライアントが送ってきたHTTPヘッダー達。
一般的に以下が利用可能。
  • HTTP_METHOD
  • HTTP_URL
  • HTTP_VERSION
  • HTTP_ACCEPT
  • HTTP_ACCEPT_LANGUAGE
  • HTTP_CONNECTION
  • HTTP_COOKIE
  • HTTP_CONTENT_LENGTH
  • HTTP_CONTENT_TYPE
  • HTTP_HOST
  • HTTP_USER_AGENT
match

ServerVariable値。
正規表現で記述します。

not="not"

match評価が False の時に条件が True とします。

子要素
[なし]
<redirect/>

リダイレクトアクション。

属性
location

リダイレクト先。
以下の置換が利用可能です。

%{HTTP_HOST}
アクセスしてきたホスト名
${0}
<guide url/> で反応したときの文字列全体。
${n}
<guide url/> で反応したときのサブマッチn個目。
<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/member/.*"> <actionif sv="HTTPS" match="off"/> <redirect location="https://%{HTTP_HOST}${0}"/> </guide> <guide url="/.*"> <actionif sv="HTTPS" match="on"/> <redirect location="http://%{HTTP_HOST}${0}"/> </guide> </guidebook> </guideman>
説明
以下のようなアクセス、
http://yourhostname/member/
をすると、
https://yourhostname/member/
へリダイレクトされます。

以下のようなアクセス、
https://yourhostname/
をすると、
http://yourhostname/
へリダイレクトされます。
status

レスポンスステータスを指定します。
指定しない場合は既定の "302 Found" が返されます。

<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/oldcontents/(.*)"> <redirect location="/newcontents/${1}" status="301 Moved Permanently"/> </guide> </guidebook> </guideman>
子要素
[なし]
<setheader/>

ヘッダーセットアクション。
クライアントが送信してきたHTTPヘッダーを変更、または追加することができます。

<?xml version="1.0" encoding="UTF-8"?> <guideman> <guidebook> <guide url="/(.+)/(.+)\.html"> <setheader name="url" value="/dispatch.asp?p1=${1}&amp;p2=${2}"/> <setheader name="x-guideman-log-target:" value="${0}"/> </guide> </guidebook> </guideman>
説明
以下のようなアクセス、
http://yourhostname/aaa/bbb.html
をすると、内部的に
/dispatch.asp?p1=aaa&p2=bbb
へのアクセスに置き換えられます。

その際、IISのログに元のURLが記録されます。
属性
name

変更、または追加するヘッダー名。
以下のヘッダー名が利用可能です。

url
"/aaa/bbb.html" など、アクセスURL。
x-guideman-log-target:
アクセスURLを変更した場合に、変更前のURLをログに残したい場合にはこれをセットしてください。
必ず名前の最後に ':' を付ける必要があります。
{your-custom-header}:
クライアントが送ってきたことにするお好きなヘッダーを指定できます。
必ず名前の最後に ':' を付ける必要があります。
ここでセットしたヘッダー値はCGIなどのプログラムから、
    "HTTP_YOUR_CUSTOM_HEADER"
で取得できます。
value

変更、または追加するヘッダー値。
以下の置換が利用可能です。

${0}
<guide url/> で反応したときの文字列全体。
${n}
<guide url/> で反応したときのサブマッチn個目。
子要素
[なし]
更新履歴
2007/09/14
  • Version: 1.0.0.0
2007/09/21
  • Version: 1.1.0.0
  • <guide or="or"/> の機能追加。
  • <actionif not="not"/> の機能追加。
2008/10/21
  • Version: 1.1.1.0
  • redirect時に無断でConnection Closeしていた問題対処
2009/05/29
  • Version: 1.2.1.0
  • redirect時ステータスコード指定機能追加(301, 302, ...)
2009/12/04
  • Version: 1.3.1.0
  • 設定ファイルロードライブラリを新しいものに入れ替え