#1013(KOOL氏)の書き込みを引用します:
>たびたびありがとうございます。現在の状況です。
>条件を一つにして実行するとうまく動いています。
>書きの場合は、___.htmから来た場合のみbbsが帰ってきます。
>ただし、更新ボタンを押したり、直接bbs.cgiへ来るとyahooへ
>飛んでいっちゃいます。
>条件式ですが、頂いた内容だと片方の条件が満たされても
>もう片方が満たされないという状況が起こっているのでしょうか?
>それともほかの何か...。どーすればー!!
BBSが表示されている状態で、
登録ボタンなどを押すと、またBBSが呼ばれます。
(自分で自分を呼びだしているから)
条件式を一つにしてあり「HTTP_REFERER変数」にはBBS(CGI)のURLが入っていますから、
比較の時点ではねられてしまうんですね。
という事はきちんと動いている・・・という事です
ちょっと調べてみましたが、
条件式を複数にした場合は、論理演算子「||」は真(1)または偽(0)を返さず、
最後に評価された演算子の値を返すようです。
ですから、このままでは、いつまでたってもBBSに入れません。
一度下記のスプリクトで試してみて下さい
$ref = $ENV{'HTTP_REFERER'}; #リンク元
$come_url = 'http://*********/*********/*********/*********/___.htm';
$for_url = 'http://www.yahoo.co.jp/';
$this_url = 'http://*********/cgi-bin/bbs.cgi';
$bbs_ok = ($ref eq $come_url || $ref eq $this_url) ? '1' : '0' ;
if ($bbs_ok == 0) {
print "Location: $for_url\n\n";
exit;
}
基本的に考え方は変わっていません。
$bbs_ok = ($ref eq $come_url || $ref eq $this_url) ? '1' : '0' ;
を追加しています。
この内容は、条件演算子で、
「$ref eq $come_url」または「$ref eq $this_url」を比較して
真になった場合「$bbs_ok = 1」偽になった場合「$bbs_ok = 0」となります。
(入るデータは?より後ろの1(真)0(偽)の数値です)
あとは、「$bbs_ok」が「0」ならLocationヘッダを実行する・・・となります。
真・偽を返す条件演算子は
$bbs_ok = ($ref eq $come_url || $ref eq $this_url) ? "OK" : "NO" ;
if ($bbs_ok eq "NO") {
としても同じです。(この場合は比較は文字列です)
ドジな頭を絞って考えてみたんですが、もっといい方法があるかもしれません。
(上手くいくといいんだけど・・・と誰かに振ろうと考えている自分。あ〜、情けない(-_-;))