wwwsrch.cgi の設置で、CGI先とH.P先のサーバーが違うためlinkがうまくいかない

[上に] [前に] [次に]
oojiro [E-Mail] [HomePage] 1999/11/08(月) 22:07:17
wwwsrch.cgi を設置させていただきました。m(_ _)m
CGIのサーバーは cgi.jomon.ne.jp で、
H.Pのサーバーは  www.jomon.ne.jp です。
検索のcgiを組み入れたく、とりあえずcgi先のフォルダにHTML ファイルのみ置いて、検索プログラムからアクセスできるようにしました。

でも検索プログラムは、自サイトの HTML を検索し、その URL を返すようになっているので、返ってくるリンク先が
http://cgi.jomon.ne.jp/~hmaruuo1/*****.htmlとなり本当のURLの
http://www.jomon.ne.jp/~hmaruuo1/*****.htmlになってくれません
うまく表示を変える手法は無いものでしょうか?

$target_dir = ../../public_html'; # 検索対象ディレクトリ

下方の 243行目
# 表示する
$target =~ s/$target_dir/..\/..\/~hmaruuo1/;
print "<P>\n";
print "<DT><A HREF=\"$target\" TARGET=out>";
$title =~ s/<[^>]*(>|$)//g;
$title =~ s/[\r\n]+//g;
&jcode'convert(*title, $kcode_cgi);
if ($title eq "") {
$title = $target;
}
print "$title</A>\n";
print "( <A HREF=\"$target\" TARGET=out>";
$target =~ s/..\/..\/~hmaruuo1\/?//;
print "$target</A> )\n";
print "<DD>";
と一部手直しはしてあります。

oojiro [E-Mail] 1999/11/08(月) 22:17:34
補足です。
http://www.jomon.ne.jp/~hmaruuo1/wwwsrch.html
から”魚”という文字で検索すると
(誤)http://cgi.jomon.ne.jp/~hmaruuo1/index.html となり
(正)http://www.jomon.ne.jp/~hmaruuo1/index.html となってくれません。
ちなみに両サーバーのディレクトリは
www.jomon.ne.jp/usr/home/hmaruuo1/public_html
cgi.jomon.ne.jp/usr/home/hmaruuo1/public_html
です。

\n 1999/11/08(月) 23:54:01
http://www.tohoho-web.com/wwwsrch.htm
の(12)でもダメですか?

#試しに設置してみたけど、ループが止まらないのはなぜ?

oojiro 1999/11/09(火) 00:04:10
(12) 検索結果のジャンプ先のURLのパス名が期待するものと異なる場合、例えば、http://xx.yy.zz/aa/bb/index.htm へのリンクになって欲しいのに http://xx.yy.zz/cc/dd/index.htm へのリンクとなってしまう場合は、wwwsrch.cgi の「# 表示する」という行の次に下記の1行を追加することで回避できます。

・・・ということですけれど、これってサーバー名までも変更できるんですか?上記でいうxx.yy.zzの部分も変更できるのかな?教えて下さい。

ニワイヂリ 1999/11/11(木) 17:39:44
>検索結果のジャンプ先のURLのパス名が期待するものと
>異なる場合・・・(中略)・・・「# 表示する」という行の次に
>下記の1行を追加するこ>とで回避できます。
>これってサーバー名までも変更できるんですか?
>上記でいうxx.yy.zzの部分も変更できるのかな?教えて下さい。

試してみればいいじゃん。ね?

Nobu3 1999/11/11(木) 20:26:18
検索結果は相対パスなので、サーバ名は入ってませんね。
http://から始まる文字列に変換すればできるでしょう。


 print "( <A HREF=\"$target\" TARGET=out>";
>$target =~ s/..\/..\/~hmaruuo1\/?//;
 print "$target</A> )\n";

この「$target」を

$target =~ s/..\/..\/~hmaruuo1\/?/http:\/\/www.jomon.ne.jp\/~hmaruuo1\//;

こんなふうに。

Nobu3 1999/11/11(木) 20:28:26
あれ?場所が違うかも・・・。

$target =~ s/..\/..\/~hmaruuo1\/?/http:\/\/www.jomon.ne.jp\/~hmaruuo1\//;
print "( <A HREF=\"$target\" TARGET=out>";
print "$target</A> )\n";

こうかな?

oojiro 1999/11/12(金) 08:50:09
[[解決]]
ありがとうございました。
上のほうも
# 表示する
$target =~ s/$target_dir/..\/..\/~hmaruuo1/;
$target=~s/..\/..\/~hmaruuo1/?/http:\//www.jomon.ne.jp\/~hmaruuo1\//;
と変えてやったところ無事に完成しました。
皆さんのご協力に感謝いたします。

Nobu3 1999/11/12(金) 11:07:10
># 表示する
>$target =~ s/$target_dir/..\/..\/~hmaruuo1/;
>$target=~s/..\/..\/~hmaruuo1/?/http:\//www.jomon.ne.jp\/~hmaruuo1\//;

これで動くのなら、最初から

# 表示する
$target =~ s/$target_dir/http:\//www.jomon.ne.jp\/~hmaruuo1\//;

とした方がスマートですね。

Nobu3 1999/11/12(金) 11:11:12
エスケープが抜けてますね (^^;;

$target =~ s/$target_dir/http:\/\/www.jomon.ne.jp\/~hmaruuo1\//;

ですね。

ふじ 1999/11/12(金) 12:53:22
>$target =~ s/$target_dir/http:\/\/www.jomon.ne.jp\/~hmaruuo1\//;
$target =~ s|$target_dir|http://www.jomon.ne.jp/~hmaruuo1/|;
こういう場合は、このほうが見やすいかと。
/ でなくても区切りに使えますから。

oojiro 1999/11/13(土) 15:57:41
ありがとうございました。
最後の / は不要のようでした。
$target =~ s|$target_dir|http://www.jomon.ne.jp/~hmaruuo1|;
でOKです。
完成したhpをご覧になってください。http://www.jomon.ne.jp/~hmaruuo1/

ふじ 1999/11/13(土) 16:16:25
>最後の / は不要のようでした。
必要です。ディレクトリ名ですから。
省略すると、

1.(クライアントがサーバに)
http://www.jomon.ne.jp/~hmaruuo1 を送ってくれ。」

2.(サーバがクライアントに)
「 ~hmaruuo1 というファイルはない。~hmaruuo1 というディレクトリはあるから
http://www.jomon.ne.jp/~hmaruuo1/ をリクエストしなさい。」

3.(クライアントがサーバに)
「それじゃあ http://www.jomon.ne.jp/~hmaruuo1/ を送ってくれ。」

4. (サーバがクライアントに)
ページを送信。

というやりとりが発生します。で、この 1. 2. の部分は無駄な
(最後の / があれば発生しない)通信ですので、
ディレクトリを表す / は省略しないようにしましょう。

ふじ 1999/11/13(土) 16:21:24
あー、勘違いしました。

既にある URL を置換するんだから、最後の / はあってもなくても一緒ですね(^^;;
単独で http://www.jomon.ne.jp/~hmaruuo1 をリクエストする場合と
勘違いしました。
大変失礼致しました (m_ _m)

oojro 1999/11/13(土) 16:25:37
どもども ありがとう!

[上に] [前に] [次に]