- ベストアンサー
サイト内検索の検索結果
現在、とほほのWWW入門(http://tohoho.wakusei.ne.jp/www.htm) というサイトで見つけたフリーのCGIを使ってサイト内検索機能を設置しました。 キーワードを入力して検索結果が出るところまでは上手くいったのですが、検索されたページのリンク先アドレスの途中に/html/が入ってしまい、ページが表示されません。 ちなみに以下のようにファイルを置いてます。 -------------------------------------------- ├cgi-bin | └wsrch313 | └wwwsrch.cgi ├html | └検索対象のフォルダ | └logs -------------------------------------------- 上記のものを見てもわかると思いますが、 cgiのファイルはcgi-binフォルダ htmlのファイルはhtmlフォルダに入れています。 cgiファイルの検索対象を指定する部分には ../../html/検索対象フォルダ と入力していて、上記のもの以外では 検索結果が出ません。(ちなみにhttp://www~というフォルダ指定は出来ないみたいです。) こういった場合どのように検索対象フォルダを指定すればいいのでしょうか。ご教授お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
すみません、説明不足でした。 先に書いたソースは例えばdocroot.cgiとか適当な名前を付けて単体で動かしてみてください。 でも、出力結果は変ですけど、 /home/riss/httpd/html が、DOCUMENT_ROOTかもしれません。 検索結果を別ページにしたい場合アンカータグでターゲット指定してください。 <a href="c.html" target="_preview">... という感じでしょうか? targetの属性は何種類かあるのでお好みで。 # 私は「_preview」が好きなので・・・。
その他の回答 (4)
- ikspiari
- ベストアンサー率48% (29/60)
あ、検索結果を別ウインドウにしたいのですか? それでしたら、検索窓の FORM タグ内でターゲット指定してください。 <form method="" action="/cgibin/wsrch313/wwwsrch.cgi" target="_preview">
お礼
度々返事が送れて申し訳ありません。 ikspiariさんのご教授により なんとか解決いたしました。 本当にありがとうございました。
- ikspiari
- ベストアンサー率48% (29/60)
すみません、階層の指定は勘違いでした。 環境変数 DOCUMENT_ROOT を確認して、絶対パスで指定してみたらどうでしょうか? #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print $ENV{'DOCUMENT_ROOT'}; で、絶対パスがわかると思います。
補足
すみません。少し補足させて頂きます。 ikspiariさんの言われていた #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print $ENV{'DOCUMENT_ROOT'}; を入れた結果、 /home/riss/httpd/htmlContent-type: text/html という文字列が載っていました。 これはどこからどこまでが絶対パスなんでしょうか。 (すみません、CGIはあまり詳しくないので…) ご教授よろしくお願いします。 また、サイト内検索でもうひとつ質問したい事があるのですが、「A.html」にキーワードを入力するところがあり、そこに、キーワードを入力したら、別ウィンドウで検索結果を出すようにし、検索結果をクリックするとリンク先を、「c.html(ターゲット指定)」に指定することは可能でしょうか。 現在使っているcgiは「とほほのWWW入門」にある、wsrch313というCGIです。 http://tohoho.wakusei.ne.jp/wwwsoft.htm ここに置いてあります。
- ikspiari
- ベストアンサー率48% (29/60)
階層の指定が1階層ずれてませんか? その位置にCGIがあると、 ../../../html/ だと思うのですが・・・。
http://***.**.jp/html/xxxx.html としたいのに、検索結果は単に /html/xxxx.html と表示されてしまい、 リンクをクリックしても飛べないってことですよね。 検索対象フォルダの指定をいじるのではなく、 cgiの中で検索結果文字列を書き出している箇所を適切に置換する必要があります。 #表示する となっているような部分があると思いますので、そこで $target =~ s |/html/|http://***.**.jp/html/|; などと書いてやると良いと思います。 検索結果のhtmlファイルに文章を書き出す際に、 /html/ という文字列を http://***.**.jp/html/ という文字列に 置き換える、というperlのコマンドです。 s |元の文字列|置き換えたい文字列| です。試してみてくださーい。
お礼
ありがとうございます。 spolonさんのいわれた通り、 $target =~ s |/html/|http://***.**.jp/html/|; を変えたらなんとかできました。 本当に助かりました。 ありがとうございます。 (すみません、補足の分は無視して下さい)
補足
すみません。 少し説明を補足させていただきます。 http://***.**.jp/xxxx.html としたいのに、検索結果はhttp://***.**.jp/html/xxxx.html と表示されてしまい、途中に/html/が入ってしまうのでこれをなんとかしたいという事です。 ちなみに置換のところを $target =~ s |/html/|http://***.**.jp/|; とか、いろいろしてみましたが、無理でした。 なにか気になる点がありましたら、ご教授お願いします。
補足
返事が遅くなり大変申し訳ありません。 検索結果を書き出すところはこのようになっています。 print "<HR>\n"; if ($found_count) { print "$found_count 件みつかりました。\n"; } else { print "1件もみつかりませんでした。\n"; } } print "</BODY>\n"; print "</HTML>\n"; どこでtargeta="_xxxxx"を使っていいかがいまいち わかりません。 何度もすみませんが、ご教授お願い致します。