[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]

Analog 5.01: 検索引数


時々、URL は?の後に引数を含みます。例えば以下の URL
/cgi-bin/script.pl?x=1&y=2
は、引数 x=1y=2 を渡して、プログラム /cgi-bin/script.pl を走らせます。( 時々サーバーは、ログファイルの別々の場所にこれらの引数を記録します。しかしもし LOGFORMAT コマンドの中の %q 項を使えば、analog はファイル名を上記のように翻訳します。)

これからすぐに 述べる ARGSINCLUDEARGSEXCLUDE のコマンドを使えば、analog は引数を読み込んだり無視したりできます。 しかし初期設定では全ての引数は読み込まれるようになっています。これが通常望まれることであり、実際これらのコマンドを使うことも無いでしょう。

引数が読み込まれたとしても、いつでもレポートに引数が現れるわけではありません。なぜなら analog は引数が十分にないとき、表示しないからです。 引数を見るためには、それに相当する ARGSFLOOR 変数を十分に小さい値にしなければなりません。

また、レポート内で検索引数が、参照されているファイルのすぐ下に箇条書きされています。このため、一時的にファイルの順番が狂います。N 項目数 を使用すればもっとはっきりします。


引数が読み込まれたと仮定すると、analog は、ファイル /cgi-bin/script.pl?x=1&y=2/cgi-bin/script.pl ( あるいは /cgi-bin/script.pl?y=2&x=1 )と異なるファイルとみなします。リクエストレポート中では、異なる引数を持った /cgi-bin/script.pl の総数を見ているために、そのようには見えません。しかし、もし 包含と除外 あるいは エイリアス をそのファイルに対して適用したいなら、問題となります。

この理由は、例えば以下のコマンド

FILEINCLUDE /cgi-bin/script.pl
は、 /cgi-bin/script.pl?x=1&y=2 ファイルには 適用されない からです 。適用させるためには、代わりに以下のようなコマンドを使わなければならないでしょう。
FILEINCLUDE /cgi-bin/script.pl*
同様に
FILEALIAS /cgi-bin/script.pl /script.pl
/cgi-bin/script.pl を別名にするが、/cgi-bin/script.pl?x=1&y=2 には適用されません。これに対しては上と同じように、
FILEALIAS /cgi-bin/script.pl?* /script.pl?$1
のようなものを使えばよいでしょう。(しかし、PAGEINCLUDEPAGEEXCLUDE は、常にクエスチョンマークより前に来るファイル名を参照している。)

逆に、もし親ファイルが含まれているときには、リクエストレポート中では引数付きのファイルだけが含まれることになるので、以下のように単に

REQINCLUDE /cgi-bin/script.pl?*x=1*
とするだけではだめであり、こうするとと何も一覧に載らないであろう。以下のように
REQINCLUDE /cgi-bin/script.pl
して、これも含まなければならない。
別のやり方は 、analog が検索引数を読み込まないようにさせることです。このようなことをするには、 ARGSINCLUDEARGSEXCLUDE 、それに REFARGSINCLUDEREFARGSEXCLUDE と呼ばれるコマンドがあります。それらは前の章で議論した 他の INCLUDEEXCLUDE コマンドと同じように動作します。 例えば、以下のコマンド
ARGSEXCLUDE /cgi-bin/script.pl
を与えられたら、analog はファイルの引数を無視し、/cgi-bin/script.pl/cgi-bin/script.pl?x=1&y=2 とみなすでしょう。 他方では、もし
ARGSINCLUDE /cgi-bin/script.pl
が指定されたら、analog は引数を読み、/cgi-bin/script.pl?x=1&y=2/cgi-bin/script.pl とは異なるファイルとして扱うでしょう。 REFARGSINCLUDEREFARGSEXCLUDE は、レファラーに対して同じ事をします。

技術的注意:ファイル名が、内蔵のかあるいはユーザ指定の別名 であるかどうかを判断する以前に、引数を含むべきかどうかの判断が先行します。従って、ログファイル中に現れる、別名でない正確な名称を使わなければなりません。 例えば、実際には以下の2つは同じファイルにもかかわらず、 ARGSINCLUDE /~sret1/script.pl は、 /%7Esret1/script.pl と一致するとみなしません。 これは ARGSINCLUDE あるいは ARGSEXCLUDE コマンド中で、 "ページ" を使えないことを意味します。なぜなら別名を付けた後では、ファイルがページかどうか分からないからです。


SEARCHENGINEINTSEARCHENGINE と呼ばれる関連したコマンドがあります 。もし、普通検索エンジンからの検索引数を伴うリンク元URLがあるなら、analog にどの項目が検索項目に相当しているか教えることができます。analog はこの情報を検索語句レポートと検索語レポートを作成するのに使います。例えば、次のレファラー
http://www.altavista.com/cgi-bin/query?pg=q&kl=XX&q=carrot+cake
を考えてみましょう。検索項目は q= にあり、従って適切な SEARCHENGINE コマンドは、
SEARCHENGINE http://www.altavista.com/cgi-bin/query q
であるか更に良いのは、
SEARCHENGINE http://*altavista.*/* q
として、異なる国の全てのミラーサイトを含むことである。

INTSEARCHENGINE コマンドは、あなたのサイト内の検索エンジンに対して同じ振る舞いをする。例えば、ファイルリクエストを次のようにするかもしれない。

/cgi-bin/search?trm=chocolate+cake
この場合には、次のように指定する。
INTSEARCHENGINE /cgi-bin/search trm

時々検索エンジンは、検索項目用に2つあるいはそれ以上の項目を持つ場合がある。このとき、以下の様にコンマで区切って全てを含めることができます。

SEARCHENGINE http://*webcrawler.*/* search,searchText

この章の残りは少しばかし技術的なものであり、普通は心配する必要は無い。最初に読むときには、多分 飛ばす であろう。

私は 以前に URL 中の %7E は、自動的に ~ 等へ変換されるとの述べた。実際は、これは ASCII の印字可能な文字 %20-%7E だけに限られる。なぜならこれらは全ての文字セットで共通に使われる文字だからである。(実際には、これさえも正しくない。専門家は、?&= を検索文字列中のディリミタと区別するために、これらが変換されないことを望んでいる。符号化された ?&= は、ディリミタと解釈されては困るのである。同様に、%%25nm%nm と混同されるのを避けるために、変換されるべきではない。)

しかし、検索語句レポートと検索語レポート中では、アスキー文字でないものも変換されたほうが有用であり、そうすれば、アクセント文字に代わって符号化された %nm を得るよりも、打ち込まれた実際の語句が見られる。従って、これらのレポートでは、analog は %A0-%FF (もし ISO-8859-* 文字セットを使用していれば)の文字か、または %80-%FF (もしアスキー文字以外のコードで、他の文字セットに対して)の文字も変換する。

しかし、この特徴を望まない理由があるときには、次のコマンドでこれをオフにすることができる。

SEARCHCHARCONVERT OFF
これらの理由としては、以下のことが考えられる。
  1. 検索エンジンに入力された語句の文字セットは、そのページに記述されている ものと、あるいは analog が出力しようとしているページと同じでないかも しれない。従って、analog の出力ページの文字セットに変換するのは、 でたらめな文字になる可能性がある。これは、特にロシア語や中国語などの ように2個以上の文字セットが普通に使用されている言語では問題となる。 他言語をサポートしているサイトでも問題となる。
  2. 全ての文字セットでは、各1バイトの文字は印字可能であるとは限らない。 analog は、%80-%9F が ISO-8859-* の文字セットでは印字不可能 であることを知っているが、しかしそれ以外では、analog は %80-%FF の全てを変換する。従って、出力中には印字不可能な文字が含まれている 可能性がある。
  3. 一体全体どうやってこの特徴がマルチバイト言語(大部分の東アジア言語の ような)に対してうまく働くかは分からない。この場合には、多分オフにする のが最善であるのを見出すであろう。

analog のホームページ

Stephen Turner
2001年05月19日

analog についての質問は analog-help メーリングリスト をお使いください。

[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]