homeホームHTMLに役立つヒントmsearch導入記 > msearchのインデックス対象ディレクトリ指定

msearchのインデックス対象ディレクトリ指定

 msearchのインデックス時に表示される「対象ディレクトリ※2(必須)」「対象ディレクトリのURL※3(必須)」の設定方法がわからないという相談が掲示板でしばしば見受けられます。

 ここでは代表的なケースを取り上げて説明します。この指定を間違えなければ、検索結果のURLが実際のファイルのURLとズレるというトラブルもなくなるはずです。

■■ 目次 ■■

1. CGIの置き場所とhtmlの置き場所 ▲ページトップ

 下に示したものは代表的なプロバイダの割り当てディスク領域です。わかりやすくするため、ディレクトリ(フォルダと思ってください)には名前の後ろに「/」をつけてあります。「name」ディレクトリはあなたに割り当てられたディスク領域です。たいていユーザー名で区別されています。この下に、さらにhtmlファイルを置くディレクトリがあるのが普通です。

 htmlファイルを置く「html」ディレクトリは、サーバによって名前がいろいろとあります。「public_html」「doc」「www」などです。「htmlファイルや画像ファイルはここにおいてください」と案内されているディレクトリがここに相当します。このディレクトリだけが誰でも参照できる(アクセスできる)ディレクトリです。

name/ (あなたに割り当てられたディレクトリ)
 ├cgi-bin/ (CGIファイルをおくディレクトリ)
 │
 └html/ (htmlファイルをおく領域。webディレクトリ)
   ├index.html (htmlファイル)
   ├image/ (画像ファイルをおくディレクトリ)
   ├ … 

 あなたに割り当てられたディスク領域(nameディレクトリ)イコールweb領域(誰でもアクセスできる領域)ではないことに注意してください。その中の一部(例えばhtmlディレクトリ)だけが誰でもアクセスできるweb領域なのです。

 もしあなたに割り当てられたディレクトリ全体がweb領域(誰でもアクセスできる)だとしたら、「http:/www.aaa.bbb.co.jp/~name/」とアクセスすると「name/」ディレクトリが表示されるはずです。しかし、現実には「name/html/」ディレクトリが表示されますよね。

 なぜこのようになっているのかというと、例えば会員しか入れないようなディレクトリを作る場合、「会員」かどうか見分けるためのIDとパスワードの照合ファイルなどは、それこそ誰にも見られたくないはずです。そうしたファイルはhtmlディレクトリより上のディレクトリに置けば直接アクセスされることはありません。セキュリティが高くなるわけです。

 cgi-binなどのディレクトリも上のようにhtmlディレクトリ外に置かれることが一般的です。これはCGIファイルを直接のぞかれるのを防ぐための措置です。このディレクトリの中のファイルには直接アクセスすることはできません。perlなどによって一度処理され、生成されたhtmlが送信されるしくみになっています。

 初心者の方はhtmlディレクトリを起点に考えがちですが、与えられた領域(name)とweb領域(html)は違うことを理解した上で、nameディレクトリを起点に考えるとぐっとわかりやすくなるはずです。

 以下、あなたに割り当てられた領域(nameディレクトリ)を起点にして解説します。

2. パターン別指定方法 ▲ページトップ

 具体的にパターンを見ながら解説します。

 CGIファイルとhtmlファイルの置き場所はサーバによって異なります。cgi-binなど、特別なディレクトリのなかにCGIを入れなくてはならないサーバと、どこにCGIをおいてもよいサーバに大別できます。

 以下の解説で、2-12-2はCGIファイルをcgi-binなどの特別なディレクトリにおかなくてはならないパターンで、2-3番はやや変則的なパターン、2-4はどこに置いてもよい場合の例です。

 いずれの場合も「http:/www.aaa.bbb.co.jp/~name/」とアクセスすると「name/html/index.html」が表示されるものとします。

2-1.cgi-binタイプ1 ▲ページトップ

1.cgi-binタイプ1

 もっとも一般的なタイプです。あなたに割り当てられた領域(nameディレクトリ)の中に、CGIをおくディレクトリ(cgi-bin)とhtmlをおくディレクトリ(html)が同格でおいてあり、CGIとhtmlははっきり分けられています。

 msearchは複数のcgiで作られていますので、cgi-binディレクトリの中にさらに「msearch」というディレクトリを作り、その中にmsearch関係のファイルをまとめてあります。つまりインデックスCGI、genindex.cgiは「name/cgi-bin/msearch/」の位置にあります。

 対象ディレクトリの指定を考えるには、自分がここにいるつもりになって、どうやったらhtmlディレクトリにたどり着けるか考えるとわかりやすいです。

 この場合は、あなたはmsearchディレクトリにいますから、梯子(ディレクトリ)を2つ上がってnameディレクトリにいき、その下にあるhtmlディレクトリにおります。

 ディレクトリを2つ上がるので「../../」とします。二つ上がったnameディレクトリにはcgi-binとhtmlのふたつのディレクトリがあり、対象にしたいのはhtmlディレクトリなので「html」におります。

 まとめると「../../html/」となります。これを「対象ディレクトリ」に指定します。

 htmlディレクトリはURLで表すと「http:/www.aaa.bbb.co.jp/~name/」で良いわけですから、そのまま「対象ディレクトリのURL」に指定します。

name/
 ├cgi-bin/
 │  └msearch/
 │    ├msearch.cgi
 │    ├genindex.cgi
 │    └ …
 │
 └html/
   ├index.html
   ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)

ディレクトリを上がる/おりる

 上のディレクトリに移動することを「上がる」、逆に下位のディレクトリ移動することを「おりる/下がる」などといいます。

 同じディレクトリを指すのは「./」、「../」はディレクトリをひとつ上がるという意味です。二つ上なら「../../」となります。下におりるときは、単純におりる先のディレクトリ名を記述します(例:html)。

 このあたりは、HTML文で画像の位置やジャンプ先のhtmlファイルを相対パスで指定するときと同じことですからわかりますよね。

2-2.cgi-binタイプ2 ▲ページトップ

2.cgi-binタイプ2

 1.と同じ構成です。違うのは、cgi-binディレクトリの中に直にmsearch関係のファイルを入れている点です。cgiは「name/cgi-bin/」の位置にあります。

 ひとつ上がればcgi-binディレクトリをでてnameディレクトリになりますから、その下のhtmlディレクトリを指定します。

 ひとつ上がって(../)、htmlにおりる(html/)わけです。

 よって、「対象ディレクトリ」は「../html/」とすれば良いわけです。

 htmlディレクトリは上と同じで、そのまま「対象ディレクトリのURL」に指定します。

name/
 ├cgi-bin/
 │  ├msearch.cgi
 │  ├genindex.cgi
 │  └ …
 │
 └html/
   ├index.html
   ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)

2-3.cgi-binタイプ変則 ▲ページトップ

3.cgi-binタイプ変則

 1、2と同様にcgi-binというディレクトリにCGIファイルを置くタイプです。しかし、cgi-binディレクトリがhtmlディレクトリと同格(1、2のケース)ではなく、htmlディレクトリの下にあります。

 普通、cgi-binディレクトリを分ける目的は、誰でもアクセスできるhtmlディレクトリの外にCGIをおいて保護するためです。そのためhtmlとcgi-binディレクトリは同格扱いとなります。

 しかし、この場合は若干目的が異なります。htmlディレクトリは誰でもアクセスできる領域ですから、その下にcgi-binを置くのはCGIファイルを保護するというより、何か問題があったときにCGIの動作を簡単に止めてしまえる、つまり管理しやすくすることだけが目的と思われます。

 ディレクトリを2つ上がるだけで対象ディレクトリの中にいることになりますから、「../../」と指定するだけです。

 しかし、そのままでは「cgi-bin」ディレクトリも検索対象に含まれてしまいます。このようにcgi-binディレクトリも検索対象に含めてしまった場合、サーバによってはうまくインデックスが作れません。そこで、「非対象ディレクトリ」にcgi-binディレクトリを指定します。

 非対象ディレクトリの指定は「対象ディレクトリからの相対パス」になります(まっとさんご指摘ありがとうございます。.cgiからの相対パスではないので注意(^_^;)。

 今度はhtmlディレクトリに自分がいると思って考えますから、単純に「cgi-bin」となります。非対象ディレクトリの指定は、最後に「/」があってもなくてもいいようです。

 htmlディレクトリはURLで表すと「http:/www.aaa.bbb.co.jp/~name/」となるわけですから、そのまま「対象ディレクトリのURL」に指定します。

name/
 └html/
   ├cgi-bin/
   │ └msearch/
   │   ├msearch.cgi
   │   ├genindex.cgi
   │   └ …
   │
   ├index.html
   ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)
対象ファイルの拡張子※4
非対象ディレクトリ※5

2-4.どこでもタイプ ▲ページトップ

4.どこでもタイプ

 htmlディレクトリ以下のどこにCGIをおいてもよいタイプです。プロバイダの設定としては珍しいタイプです。

 左の例ではhtmlディレクトリ直下に「msearch」ディレクトリを作り、その中にmsearch関係のファイルを入れています。

 対象ディレクトリ「html」にはディレクトリをひとつ上がるだけでhtmlディレクトリにいるわけですから、「../」を指定します。

 ただし、3のケースと同じようにmsearch自身の入ったディレクトリを除外した方が無難です。そこでmsearchディレクトリを「非対象ディレクトリ」に指定します。htmlディレクトリ(対象ディレクトリ)からの相対パスで指定しますから、「msearch」となります。

name/
 └html/
   ├msearch/
   │ ├msearch.cgi
   │ ├genindex.cgi
   │ └ …
   │
   ├index.html
   ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)
対象ファイルの拡張子※4
非対象ディレクトリ※5

3. 応用 ▲ページトップ

 ここまでは素直にhtmlディレクトリが検索対象ディレクトリの場合でした。

 ここまでお読みになった方はおわかりになると思いますが、「対象ディレクトリ※2(必須)」は「genindex.cgi」から見た対象ディレクトリの位置(相対パス)を指定し、「対象ディレクトリのURL※3(必須)」は「そのディレクトリのURL」を指定すればよいわけです(「相対パス」「とURL」の違いがわからない場合は「CGI設置入門」をご一読下さい)。

 それさえわかっていれば、html以下の特定のディレクトリだけを検索対象にしたいような場合も指定方法はおわかりになるはずです。

応用

 左のような構成だとして、「onlythis」ディレクトリを指定してみてください。

 わかりましたか?

 では解答編です。

●対象ディレクトリ

 まず、genindex.cgiからディレクトリを二つ上がってnameディレクトリに達しますから、「../../」ですね。nameディレクトリにはcgi-binとhtmlがありますが、目的はhtmlのさらに下のonlythis(html/onlythis/)ですから、これをつなげて「../../html/onlythis/」となります。

●対象ディレクトリのURL

 htmlディレクトリは「http:/www.aaa.bbb.co.jp/~name/」で、その下のディレクトリがURLになりますから「http:/www.aaa.bbb.co.jp/~name/onlythis/」となります。

 正解しました? おめでとうございます。

name/
 ├cgi-bin/
 │  └msearch/
 │    ├msearch.cgi
 │    ├genindex.cgi
 │    └ …
 │
 └html/
   ├index.html
   ├image/
   ├onlythis/
   │ ├index.html
   │ ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)

4. ローカルマシンでインデックスする場合 ▲ページトップ

 ここまで順を追って読んでこられた方は、すでにどうやるかわかっていると思います。

 生成されるインデックスを覗くとわかりますが、2番目の要素で、ファイルの在処を「http:/www.aaa.bbb.co.jp/~name/index.html」のようにURLとして記録しています。「対象ディレクトリ※2(必須)」と「対象ディレクトリのURL※3(必須)」の指定が正しければ、インデックスファイルに記録されているURLは正しいURLになっているはずです。

 「ローカルサーバで指定した検索対象ディレクトリは、プロバイダのサーバではどんなURLになるのか」考えればよいだけです。

4-1.プロバイダのサーバとローカルサーバの構造が同じ。 ▲ページトップ

 上記の「1.cgi-binタイプ1」だとして説明します。

1.cgi-binタイプ1

ローカルサーバ編

 サーバ上と同じ環境をローカルサーバでも作ってやると話は非常に簡単になります。

 その場合は「対象ディレクトリ※2(必須)」は「1.cgi-binタイプ1」とまったく同じ「../../html/」を指定します。

 構造が同じですから「対象ディレクトリのURL※3(必須)」も「1.cgi-binタイプ1」と同じ「http:/www.aaa.bbb.co.jp/~name/」を指定すればOKです。

 ローカルサーバで検索してみてください。うまくいっていれば、ちゃんとプロバイダのサーバアドレス(http:/www.aaa.bbb.co.jp/~name/)が検索結果ファイルのURLに表示され、クリックするとそちらを読みに行くはずです。

 ちゃんとプロバイダのサーバを読みに行き、正常に表示されたら安心してインデックスファイルをプロバイダのサーバにアップロードしてください。

name/
 ├cgi-bin/
 │  └msearch/
 │    ├msearch.cgi
 │    ├genindex.cgi
 │    └ …
 │
 └html/
   ├index.html
   ├image/
   ├ …

対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)

4-2.プロバイダのサーバとローカルサーバの構造が違う。 ▲ページトップ

 プロバイダのサーバと同じ環境が何かの原因で構築できなかった場合でも、「ローカルサーバで指定した検索対象ディレクトリは、プロバイダのサーバではどんなURLになるのか」を考えればよいわけです。

 今度はプロバイダのサーバとローカルサーバでディレクトリ構造が異なっているケースを考えてみます。

プロバイダのサーバ

 左に示したように、プロバイダのサーバとローカルサーバでディレクトリ構造が異なっている場合でも、適切に指定してやるだけで正常なインデックスが作れます。

 対象にしたいディレクトリはプロバイダ・ローカル共に「name/html/」(太字部分)ディレクトリです。

 「対象ディレクトリ※2(必須)」はローカルサーバで考えればいいので、左のような場合はひとつ上がるだけですから「../」を指定します。

 ただし、そのままではmsearchディレクトリも対象になってしまうので、「非対象ディレクトリ※5」でmsearchを非対象ディレクトリに指定します。

 「対象ディレクトリのURL※3(必須)」は、プロバイダのサーバでは「name/html/」はどんなURLになるか考えます。答は簡単。「http:/www.aaa.bbb.co.jp/~name/」を指定すればOKです。

 上と同じく、ローカルサーバ上で検索してみて、正しくプロバイダのサーバファイルにリンクしていれば合格です。できあがったインデックスをプロバイダのサーバにアップしてください。

name/
 ├cgi-bin/
 │  └msearch/
 │    ├msearch.cgi
 │    ├genindex.cgi
 │    └ …
 │
 └html/
   ├index.html
   ├image/
   ├ …
ローカルサーバ
name/
 └html/
   ├msearch/
   │ ├msearch.cgi
   │ ├genindex.cgi
   │ └ …
   │
   ├index.html
   ├image/
   ├ …
対象ディレクトリ※2(必須)
対象ディレクトリのURL※3(必須)
対象ファイルの拡張子※4
非対象ディレクトリ※5


homeホームHTMLに役立つヒントmsearch導入記 > msearchのインデックス対象ディレクトリ指定