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

Analog 5.91beta1: 検索引数


URL には、「?」記号の後に幾つかの引数が含まれていることがあります。例えば、以下の URL
/cgi-bin/script.pl?x=1&y=2
では、/cgi-bin/script.pl プログラムが x=1y=2 という引数で実行されたことを意味します (サーバによっては、これらの引数をログファイルの別のフィールドに記録するものもありますが、LOGFORMAT コマンドの %q フィールドを使えば、 Analog がファイル名を上記の形式に変換してくれます)。

以下で説明する ARGSINCLUDEARGSEXCLUDE コマンドを使えば、Analog にこうした引数を読み込ませたり、無視させたりすることができます。デフォルトではすべての引数が読み込まれるようになっています。これは通常期待される動作だと思いますので、これらのコマンドが必要になることは、通常ないでしょう。

ただし、Analog は適切な設定が記述されていないと引数を表示しませんので、引数が読み込まれていても、レポート中で常にすべての引数が表示されるとは限りません。引数を表示させるには、関連するコマンドのARGSFLOOR パラメータの値を小さい値に設定することが必要になります。

また、レポート内では、search argument が関連するファイルの直下に表示されますので、通常のファイルの並び順が乱れます。 このことは、N column を有効にすれば、さらにはっきりするでしょう。


引数が読み込まれた場合、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 がsearch argument を読み込まないようにすることも可能です。これを行なうためのコマンドとして、 There are commands called ARGSINCLUDEARGSEXCLUDEREFARGSINCLUDEREFARGSEXCLUDE といったものがあります。 これらのコマンドは、前章で説明した 他の INCLUDEEXCLUDE コマンドと同じように機能します。 例えば、以下のコマンド
ARGSEXCLUDE /cgi-bin/script.pl
により、Analog は上記ファイルの引数を無視するようになり、 /cgi-bin/script.pl?x=1&y=2/cgi-bin/script.pl と同じようにみなします。一方
ARGSINCLUDE /cgi-bin/script.pl
という記述を行なった場合、Analog は引数を読み込むため、 /cgi-bin/script.pl?x=1&y=2 は、 /cgi-bin/script.pl とは別のファイルとして扱われます。 REFARGSINCLUDEREFARGSEXCLUDE は、リンク元 URL に対して、同様の処理を行ないます。

注意: 引数を無視するかどうかの確認は、組み込みの、あるいはユーザが定義した エイリアスによる置換の前に行なわれます。 そのため、コマンドの記述には、ログファイル中に現われるエイリアス前のファイル名を用いることが必要です。 例えば、ARGSINCLUDE /~sret1/script.pl は、事実上同じファイルを示す /%7Esret1/script.pl とマッチしません。 また、ARGSINCLUDEARGSEXCLUDE コマンドでは、「pages」による指定はできません。これは、ファイルが「page」に該当するかどうかは、エイリアスを適用してからではない判断できないからです。


関連するコマンドとして、SEARCHENGINEINTSEARCHENGINEというものがあります。検索エンジンからのアクセスを示すリンク元 URL 中に search argument が含まれていた場合、このコマンドにより、Analog に対してどのフィールドが検索語に対応しているかを指定することができます。 Analog は、この情報を用いて、検索レポートと検索語レポートを生成します。例えば、リンク元 URLが
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
のように指定することで (このファイルが ARGSEXCLUDE の対象になっていない限り)、「chocolate cake」が内部の検索レポート中に表示されます。

検索エンジンによっては、複数のフィールドに検索語が現われる場合があります。 こうした時には、以下のようにしてそのすべてをコンマ区切りで並べて記述することができます:

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

この章の残りの部分は、やや技術的な説明であり、通常知る必要のない事項になります。ドキュメントを初めて読む際には、おそらく以下を飛ばして次の章を読んだ方がよいでしょう。

わたしは、 以前の章で、 URL 中の %7E などの表記は、自動的に ~ などの文字に変換されるという説明を行ないました。しかし実際のところ、この処理は印刷可能なASCII文字である %20-%7E についてのみ行なわれます。これは、これらの文字のみがどの文字セットでも共通的に使われる文字であるためです。(実際には、この説明は正しくありません。専門家にとっては、クエリ文字列のデリミタを区別するため、&;= は変換されない方がよいでしょう。エンコードされている?&;= は、デリミタではありません。また%25nm%nmと混同しないようにするため、%も変換されません。)

しかし、検索レポートと検索語レポートでは、ASCII 文字以外の文字を変換して、実際に入力した文字列を確認できた方が、例えばアクセント文字がすべて%nm形式のコードになってしまうよりも便利でしょう。 そのため、Analog は、これらのレポート中に現われる %A0-%FF (ISO-8859-* 文字セットの場合) もしくは %80-%FF (それ以外のほとんどの文字セットの場合) の文字についても変換を行ないます。

もっとも、この機能を使いたくない理由がある場合には、以下のコマンドでこの変換を抑止することができます。

SEARCHCHARCONVERT OFF
理由としては、以下のようなものが考えられます:
  1. 検索エンジンに入力されたクエリの文字セットは、ページを記述している文字セットや、Analog が出力ページに利用している文字セットと同じであるとは限りません。 そのため、Analog の出力ページの文字セットに変換すると、文字化けしてしまう可能性があります。 これは、特にロシア語のように複数の文字セットが広く用いられているような言語で問題となります。 また、多くの言語のコンテンツがあるサイトでも同様の問題が発生します。
  2. すべての文字コードが、どの文字セットでも表示可能であるとは限りません。 Analog は、%80-%9F が ISO-8859-* 文字セットで表示できないと文字コードであることを認識しますが、それ以外の文字セットの場合は、%80-%FFのすべての文字コードを変換します。そのため、出力中に表示できない文字が含まれてしまうかも知れません。
出力が ASCII の場合、SEARCHCHARCONVERT は常に無効になります。また、マルチバイトな文字セットで出力が行なわれる際も、このコマンドがうまく動作するかが不明のため、デフォルトで無効になります。
Analog ホームページ

Stephen Turner
23 August 2003

Analog についての質問はanalog-help メーリングリスト をお使いください。 (訳注: 日本では analog-jp メーリングリスト をご利用ください)

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