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

[上に] [前に] [次に]
blue [E-Mail] [HomePage] 1998/11/01(日) 19:27:42
wwwsrch.cgi を設置させていただきました。m(_ _)m
ところが CGI先とH.P先が 微妙に違いますので リンクがうまくできません。
ご教授下さい。

$target_dir = '/home2/tel/blue/public_html/';       # 検索対象ディレクトリ
実際のH.P  http://www.kcn.or.jp/~blue/
CGI は   http://www.kcn.or.jp/cgi-bin/blue/wwwsrch.cgi
に 置いています。

下方の 243行目
                        # 表示する
                        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/$target_dir\/?//;
                        print "$target</A> )\n";
を どうにかすれば、、、とやっているのですが、???です。
よろしくお願いします。

blue [E-Mail] [HomePage] 1998/11/02(月) 09:29:02
追伸
たとえば 探索して表示されたページを リンク集(link.html)としますと リンク先が
http://www.kcn.or.jp/~blue/link.html   (正解) とならずに
http://www.kcn.or.jp/home2/tel/blue/public_html//link.html     (誤) となります。

Tiot 1998/11/02(月) 10:43:22
あまり良く調べていないので自信はないのですが、
wwwsrch.cgiの$target_dirが相対パスで指定するような仕様になっているからだと思います。
$target_dirを相対パスにできませんか?
$target_dir = '../../home/blue'とか。
最後のスラッシュは必要ないと思います。あると(誤)のようにファイルネームの前に//となってしまいます。
プロバイダによってはcgi部分で相対パスを使うのができないことがありますが(多分そうな気がする)、その場合は(http://から始まるurlを使って)スクリプトの中をいじってやるしかないのかなぁ。
いじるとすれば、ファイルの本当のパスの他にも、仮想パス(urlであらわされるファイルの場所)も覚えておくようにするのが本当ですが、まぁ、最後の所で$targetの文字列処理でやってしまった方がお手軽。

Tiot 1998/11/02(月) 11:07:13
補足:
文字列処理というのは
最後のHTMLをかき出す部分の
print "<DT><A HREF=\"$target\" TARGET=out>";
の直前に
$target =~ s/$target_dir/..\/..\/~blue/;
という文を入れると言うことです。
(その場合でも$target_dir = '/home2/tel/blue/public_html/';は、
$target_dir  = '/home2/tel/blue/public_html'にしておいて下さい)
確認していないのでこれでうまくいくかどうか保証はまったくありません。
あしからず。

blue [E-Mail] [HomePage] 1998/11/02(月) 13:29:04
ありがとうございます。
文字列処理でやってみましたら ちゃんとしたリンクとなりました。
ただ (  )内の 文字が( ../../~blue/link.html  ) となります。
正解は ( link.html ) です。 リンクは あっています。
これは 
#-------------
                         $target =~ s/$target_dir/..\/..\/~blue/;
#----------
                       print "( <A HREF=\"$target\" TARGET=out>";
                       $target =~ s/$target_dir\/?//;
** この 欄に **
                        print "$target</A> )\n";
なにか 書き込めばいいと思うんですが、何をどうすればよろしいでしょうか?
おねがいします。

又、 トップページを除いた全てのページを euc decode でやっているので( 他の探索CGIのため )
N.N の 文字コードセットを自動判別にしているのに かかわらず、文字ばけします。
( これは N.Nで その場で checkし直せば 直りますが、、、)
これの 対処は出来るのでしょうか?

Tiot 1998/11/02(月) 16:07:38
$target =~ s/$target_dir\/?//; を
$target =~ s/..\/..\/~blue\/?//;に直したらどうでしょう?(追加でなくて変更)
今回もあまり自身がないなぁ。
あと文字コードはラウンジでは読み込むときにeucにして
かき出すときにsjisにしているので、
jcodeでsjisに変換している所を探してeucに変えれば良いと思います(下の方にあると思う)。
書きだす直前のjcodeはeucならいらないかも。
#あった方が確実ですが、文字コードの変換って結構重い。
#ソースを追わないとほんとによいはわかりません。

blue 1998/11/02(月) 16:49:01
[[解決]]
>$target =~ s/$target_dir\/?//; を
>$target =~ s/..\/..\/~blue\/?//;に直したらどうでしょう?(追加でなくて変更)
この通りに書き換えました所、無事 出来ました。m(_ _)m

EUC の件は いろいろ実験してみましたところ、「 新しいウインドウでリンクを開く 」とした場合のみ
こういう現象が起きていました。
この CGIは こういう手間を取らなくても かってに 新しいウインドウを開いてくれていました。 (^^;)
結局 手をつけなくても「可」が 正解でした。 ありがとう ございました。 m(_ _)m

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