Analog 5.01: 検索引数
/cgi-bin/script.pl?x=1&y=2は、引数 x=1 と y=2 を渡して、プログラム /cgi-bin/script.pl を走らせます。( 時々サーバーは、ログファイルの別々の場所にこれらの引数を記録します。しかしもし LOGFORMAT コマンドの中の %q 項を使えば、analog はファイル名を上記のように翻訳します。)
これからすぐに 述べる ARGSINCLUDE と ARGSEXCLUDE のコマンドを使えば、analog は引数を読み込んだり無視したりできます。 しかし初期設定では全ての引数は読み込まれるようになっています。これが通常望まれることであり、実際これらのコマンドを使うことも無いでしょう。
引数が読み込まれたとしても、いつでもレポートに引数が現れるわけではありません。なぜなら analog は引数が十分にないとき、表示しないからです。 引数を見るためには、それに相当する ARGSFLOOR 変数を十分に小さい値にしなければなりません。
また、レポート内で検索引数が、参照されているファイルのすぐ下に箇条書きされています。このため、一時的にファイルの順番が狂います。N 項目数 を使用すればもっとはっきりします。
この理由は、例えば以下のコマンド
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のようなものを使えばよいでしょう。(しかし、PAGEINCLUDE と PAGEEXCLUDE は、常にクエスチョンマークより前に来るファイル名を参照している。)
逆に、もし親ファイルが含まれているときには、リクエストレポート中では引数付きのファイルだけが含まれることになるので、以下のように単に
REQINCLUDE /cgi-bin/script.pl?*x=1*とするだけではだめであり、こうするとと何も一覧に載らないであろう。以下のように
REQINCLUDE /cgi-bin/script.plして、これも含まなければならない。
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 とは異なるファイルとして扱うでしょう。 REFARGSINCLUDE と REFARGSEXCLUDE は、レファラーに対して同じ事をします。
技術的注意:ファイル名が、内蔵のかあるいはユーザ指定の別名 であるかどうかを判断する以前に、引数を含むべきかどうかの判断が先行します。従って、ログファイル中に現れる、別名でない正確な名称を使わなければなりません。 例えば、実際には以下の2つは同じファイルにもかかわらず、 ARGSINCLUDE /~sret1/script.pl は、 /%7Esret1/script.pl と一致するとみなしません。 これは ARGSINCLUDE あるいは ARGSEXCLUDE コマンド中で、 "ページ" を使えないことを意味します。なぜなら別名を付けた後では、ファイルがページかどうか分からないからです。
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これらの理由としては、以下のことが考えられる。
Stephen Turner
analog についての質問は analog-help メーリングリスト をお使いください。