- ベストアンサー
アクセス元URLによって振り分ける方法
- アクセス元URLによって異なるCGIに送信する方法が知りたい。
- 50以上のアクセス元URLを別々のCGIに振り分けたい。
- アクセス元がアドレス1なら1.cgi、アクセス元がアドレス2なら2.cgi、アクセス元がアドレス3なら3.cgi、アクセス元がアドレス4なら4.cgi、アクセス元がアドレス5なら5.cgiに送信する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>エラーになってしまいます ちょっと手抜きで書いたので アドレス1→'アドレス1' 1.cgi→'1.cgi' addrX→'addrX' みたいに「'」で括ってみてください。 それでもエラーになるなら、 CGIの2行目あたりに、 use CGI::Carp qw(fatalsToBrowser); と、入れるとエラーの出る行番号なんかが出るはずなので場所を特定してください。
その他の回答 (3)
- steel_gray
- ベストアンサー率66% (1052/1578)
こんな感じで。 リファラーと送信先CGIの名前の関連性みたいのがはっきりしていれば、 50以上のリストをバカ正直に書かなくてもいいかもしれないけど。 # リファラーと送信先のリスト定義 %ref_addr=( アドレス1 => 1.cgi, アドレス2 => 2.cgi, ~~ アドレス50 => 50.cgi, ); # 環境変数HTTP_REFERERに合わせた送信先の設定 $cgiaddr = $ref_addr{$ENV{HTTP_REFERER}}; # 値が空だったら未定義のリファラー、送信先をaddrXに設定 $cgiaddr = addrX unless($cgiaddr); print qq|<FORM name="form" action="$cgiaddr" method="POST">|;
お礼
ご回答ありがとうございます。 何度か試してみましたが、エラーになってしまいます。cgiスクリプトとの相性がわるいのでしょうか?No.2で教えていただいた内容では動作しました。お手数ですが、宜しくお願いいたします。
- venzou
- ベストアンサー率71% (311/435)
>リファラーは正常に取得できております。 でしたら、 @adr = ('アドレス1','アドレス2',・・・ for($i = 0; $i <= $#adr; $i++){ if($ENV{'HTTP_REFERER'} eq $adr[$i]){ print('<FORM name="form" action="'.($i+1).'.cgi" method="POST">'); last; } } こんな感じでどうでしょう?
お礼
ご回答ありがとうございます。 実際に使う送信先のcgi名が数字でないのですが、その場合はどのようにすればよろしいのでしょうか。 また、リファラーが取得できなかった場合の送信さきも指定できますでしょうか。わからないことばかりで申し訳ございません。
- venzou
- ベストアンサー率71% (311/435)
$ENV{'HTTP_REFERER'} 環境変数でアクセス元を調べる手が有ります。 しかし、プロバイダによっては、内容が入ってないことも、違うアドレスが入ることもあります。 まず、これが使えるか確認してみてください。
お礼
ありがとうございます。リファラーは正常に取得できております。
お礼
おかげさまで解決することができました。本当にありがとうございました。