インフォメーションBBS

[使い方] [タイトルのみ] [関連発言] [最新20発言] [過去ログ一覧]
1014 わかやま神 [RE] 2000/05/30 11:47 [修正]
RE10:ミニBBSに直接アクセスできないようにするには
#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") {
としても同じです。(この場合は比較は文字列です)

ドジな頭を絞って考えてみたんですが、もっといい方法があるかもしれません。
(上手くいくといいんだけど・・・と誰かに振ろうと考えている自分。あ〜、情けない(-_-;))

1個のレスポンスが付いています:
1015 2000/05/30 09:49 RE11:ミニBBSに直接アクセスできないようにするには = 水原@女神教会

[トップページに戻る]管理人 : キャメル