- 締切済み
アクセス制限について
自宅サーバのHPで下記の例のようにページAをクリックしてからでないとページBに行けずエラーが出るCGIのページを作りたいと思っていますがまったくわかりません(TT) 例Bをクリック→エラー:先にAをクリックしてください。 Aをクリック→Bをクリック→ページBを表示 のようにしたいです。 いちおういろいろ検索し「直接アクセスされては困るページ制限(参照制限) v1.00」というCGIを見つけて実行してみたのですがエラーが出て表示されません。 どなたかわかる方いましたら教えてください。 ちなみに携帯のHPで使うつもりです。 WWWサーバはApache2.0を使用してます。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- _himajin_
- ベストアンサー率65% (128/195)
試しにActivePerl5.10.0を入れてスクリプトのみ動かしてみました。 結果、コピペ時の問題なのかわかりませんが、3行目の$ref_url設定箇所にUnicodeの制御文字らしきものがあって動きませんでした。 このスクリプトをコマンドプロンプトで実行すると以下のようなエラーが出ます。 Search pattern not terminated at C:\***\test.pl line 3. これと同一原因なら、メモ帳などで一度エンコードをANSI(ASCII)またはShiftJISにして保存して開き直すと、3行目が以下のような感じで表示されるはずなので、「?」2カ所を削除してください。 $ref_url = '?http://www.yahoo.co.jp';? 同一原因ではなくても、コマンドプロンプトで実行することで前記のようなエラー表示がされますので、原因解析が楽に出来ると思います。
- Azzz___
- ベストアンサー率40% (9/22)
今は直接の原因が分からない状態ですよね? その場合の私の見つけ方です。(もっといい方法あるかもですが) 下記の(1)(2)を追加します。 print "Content-type: text/html\n\n"; #(1)適当な文章を入れる print "test"; #(2)処理を終了する exit; 上記でエラーが発生しなければ次は下記の後に (1)、(2)を追加します。 $ref = $ENV{'HTTP_REFERER'}; これでエラーが発生しなければ、更にひとつ元のコードを 入れて確認します。 これでコードのどこでエラーになっているのか問題の切り分けが できます。 力作業になりますが、よろしければお試し下さい。
- _himajin_
- ベストアンサー率65% (128/195)
そのスクリプトの配布元URLとエラーログを教えてください。 Refererを見て、適切なモノが設定されていればページを遷移するものだと思いますが、何か設定が間違っているのだと思います。 よくあるところとしては下記あたり。 1.perlなどのパス 2.パーミッション設定 3.書き換えなくてはいけない箇所の不足/ミス
補足
ご回答ありがとうございます。 スクリプト配布もとのURLは http://www.rescue.ne.jp/cgi/reflimit/ です。 これを自分なりに下記のように作りました。 #--------------------------------------- #!C:/Perl/bin/perl $ref_url = 'http://www.yahoo.co.jp'; print "Content-type: text/html\n\n"; $ref = $ENV{'HTTP_REFERER'}; $ref =~ tr/+/ /; $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if (!($ref =~ /$ref_url/i)) { &error; } while (<DATA>) { print; } exit; sub error { print <<'EOF'; <HTML><HEAD><TITLE>404 File Not Found</TITLE></HEAD> <BODY><H1>Error</H1> Error </BODY></HTML> EOF exit; } print "Content-Type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<h1>Hello!</h1>\n"; print "</body>\n"; print "</html>\n"; exit; #-------------------------------------- これをtest.plで保存し携帯のほうで確認しましたがエラーが出てしまいました。 エラーは「このページはエラーにより表示できません(500)」と出ます。 perlのパスはCドライブ/Perl/bin/perlなのであっていると思います(たぶんです)。 パーミッションの設定は書き忘れていましたが、Windowsを使っているのでパーミッション設定はいらないと勝手に思っているのですがあってるでしょうか? 話は変わりますが簡単なカウンタのCGIでさえ表示されないので、もしかしたらCGIの使い方がわからないだけかも知れません(汗) いちおう下記のCGIは動いたのでApacheの設定はあっているとは思います。 #-------------------------------------- #!C:/Perl/bin/perl print "Content-Type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<h1>Hello!</h1>\n"; print "</body>\n"; print "</html>\n"; exit; #-------------------------------------- 長くなりましたがよろしくお願いします。
補足
ご回答ありがとうございます。 そういうやり方があったんですね!! 一度ためしてみます。