• ベストアンサー

Location: で cgi → cgi は不可?

print "Location: ./index.cgi\n\n"; 上記の命令でエラーとなります。 i-mode用のHPを作ろうと思うのですが,情報の受渡が必要でして・・・ どうすればいいのでしょう? 何かいい方法有りませんか?

  • KIMV
  • お礼率10% (83/770)
  • Perl
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.3

 Location: ヘッダは、http:// から始まるフルパスでないと動きません。  チェックしてみてください。

その他の回答 (3)

  • haporun
  • ベストアンサー率40% (230/562)
回答No.4

so_blueさんに補足ですが、これはケータイがページをキャッシュしてしまうからです。 通常、CGIはキャッシュされませんが、ケータイはお構いなしにキャッシュします。 ちなみにi-modeはロケーションは相対パスでも動きますが、ezwebは動きませんでした。 ただし、どちらも.と..を理解しているかどうかは不明です。 127.0.0.1というのはこの場での代用ですか? ちゃんとプロパイダからもらったIP使ってますか?

KIMV
質問者

補足

httpdで自分の機械(スタンドアロン)でテストしていまして, 127.0.0.1は自分のマシンを表しています。

  • marimo_cx
  • ベストアンサー率25% (873/3452)
回答No.2

質問の意味が全くわかりません。 何をしようとしてどんなエラーが出るかぐらい書いたらどうでしょう? ソースが示されていないのですから類推も出来ません。

KIMV
質問者

補足

検索中のページには問題があるため表示できません。 -------------------------------------------------------------------------------- HTTPDでテストを行っていますが,下記のメッセージがでます。 質問の行を別の"HTML"で行うと動きます。 ---------------------------------------------------------------------- 次のことを試してください: 127.0.0.1 ホーム ページを開いてから、表示する情報へのリンクを探してください。 [更新] ボタンをクリックするか、後でやり直してください。 [検索] ボタンをクリックして、インターネット上の情報を検索してください。 関連したサイトの一覧 も表示できます。 HTTP 500 - 内部サーバー エラー Internet Explorer

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.1

こんにちは。 print "Location: ./index.cgi\n\n";   ↓↓ print "Location: ./index.cgi?\n\n"; にしてみてください。 詳しい理由は不明ですが、locationが別スクリプトでなく 自己である場合は、末尾に?を記述するようです。

関連するQ&A

  • a.cgi → b.cgiへデータの受渡し方法

    a.cgi → b.cgiへデータの受渡しを行いたいのですが i-modeのHPで,画面入力させた内容を a.cgi → b.cgiに受け渡す方法を教えて下さい。 例?:a.cgiに下記のコーディングでは無理ですよね・・・ $aa=$FORM{'aa'}; print "Location: http:・・・・・i/b.cgi?a=$aa\n\n";

    • ベストアンサー
    • Perl
  • Locationの部分をいじる

    携帯サイトを作っています。 パスワード認証(1.cgi)→端末振り分け(2.cgi)という流れにしたいのですが、vodaとPCは問題なく各々の目的のページに飛べるのですが、i-modeがエラーがでてしまうようです。 振り分け先に指定しているURLなんかはちゃんと合っています。 どうも、i-modeでLocationが機能しないのが原因ではないかと思うのですが、cgiのいじり方が分かりません。 サポートBBSによると1.cgiの以下の部分を変えるそうなのですが if ($pass eq $password) { print "Location: $cgi\n\n"; exit; } の部分のLocationが機能しないのだと思います。 秘密cgiで表示する最初のページを、この部分で読み込み表示する方法や、この部分にcgiへのリンクを張る方法をとられてはいかがでしょう? ということで、具体的にどうしたらよいのか分かりません。(サポートBBSが実質停止状態なので・・・) わかる方いらしたら、ご教授いただければと思います。

    • 締切済み
    • CGI
  • Locationでターゲット指定はできますか?

    print("Location: ../admin.cgi?action=head&page=cnn\n\n"); のように他のcgiへページを移行しているのですが、フレームの中に cgiファイルを出力しているのでtargetの指定が必要になります。 Locationを使ってtarget指定は出来ないのでしょうか? もし、やったことのある人がいればご指導ください。

    • ベストアンサー
    • Perl
  • Locationについて

    こんにちは。 今PerlでLocationを使って2つに分かれているフレームの(frame1とframe2)frame1にリンクをさせようとしています。 下のソースの中にTarget="frame1"を追加したいのですが追加は可能でしょうか? プログラムはこんな↓感じです。 print "Location: http://www.XXX/cgi-local/XXX.cgi?free=$XX\n\n"; ご教授ください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • エラーページでLocationしたい

    .htaccessにて ErrorDocument 403 /error.cgi とかしておいて error.cgiにて #!/usr/bin/perl print "Location:http://domain/\n\n"; みたいなことしたいんですが、IEではページの表示が認められてませんとなってしまいました。 一応内容を表示して Refresh:0;URL=..... としたら飛んでくれますが、LocationはエラーCGIでは使えないんでしょうか。 ----- Apache/1.3.26 Server perl, version 5.005_03 built for sun4-solaris Windows 2000 Pro SP1 Internet Explorer 5.5 SP2

    • 締切済み
    • CGI
  • perlでLocation

    Locationでは#xxxというのは使えないのでしょうか? #!/usr/local/bin/perl print "Location:xxx.cgi#xxx/?userID=$name\n\n"; exit; という風に書いています。 xxx.cgiはローカルにあるcgiでそのcgiの中身は表示できます。 しかしxxx.cgiの中の <xxxx.cgiの中身> print <<"EOM"; <html> . . . <A NAME="xxx>image</A> . . . </HTML> EOM exit; xxxのところでなく一番最初が表示されてしまいます。 どうすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • Locationを使いたいのですが

    はじめて質問します。よろしくお願いします。 フォームからデータを受け取って、なんらかの処理をしてから、 locationで別のページへジャンプしたいのです。 下のソースで、ローカル(win95)では正常に動いたのですが、 サーバーに移すと送信後のtest.cgiがエラーになってしまいます。 text.txtへの書込みはちゃんと行われています。 原因がわからなくて困っています。 locationの使い方が間違っているのでしょうか? ↓↓ test.cgiソース ↓↓ ------------------------------------------------------------ #!/usr/bin/perl require 'jcode.pl'; &decode; if ($FORM{'cmd'} eq "regist") { &write; # ファイル書込み print "Location: index.html\n\n"; } else { print <<END; Content-type: text/html <HTML><HEAD><TITLE>タイトル</TITLE></HEAD> <FORM ACTION="test.cgi" METHOD="POST"> <INPUT TYPE=TEXT NAME="message" VALUE=""> <INPUT TYPE=SUBMIT NAME="submit" VALUE="送信"> <INPUT TYPE=HIDDEN NAME="cmd" VALUE="regist"> </FORM> </BODY></HTML> END } exit; # ファイル書込み sub write { open OUT, ">test.txt"; print OUT "$FORM{'message'}\n"; close OUT; }

    • ベストアンサー
    • Perl
  • CGIでhtmlページを表示する

    連日質問させていただいています。 CGI超初心者です。 htmlファイルにラジオボタンを設置し、 Aを選んだらhttp://www.a.html、 それ以外を選んだらhttp://www.b.html というサイトを開くようなCGIを作成したいです。 以下のようにやってみたのですがうまくいきません。 どのように修正したらいいでしょうか? #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ 上記のようにすると、以下のように、ただ文字が表示されてしまいます。 Location: http://www.a.html #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "charset=Shift_JIS\n\n";←★ print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ ★部分が悪いのかなぁと思い、上記のように修正してみたり、 (Content-Type: text/html; を削除してみました) ★部分を全部削除してみると Internal Server Error となってしまいます。 よろしくお願いいたします!

    • ベストアンサー
    • CGI
  • 次のcgiファイルを開くには? もう一度

    http://oshiete1.goo.ne.jp/qa3951263.html で質問している者です。 間違って、[回答への補足] に書いてしまいました。 もう一度質問させてください。すみません。 Location を 教えていただき、とても感謝しております。 でも、私の 001.cgi は 以下のように始まっております。 print header(-charset => 'Shift_JIS'); print start_html("001.cgi"); このprint header(-charset => 'Shift_JIS');を消して if (param('answer') eq $ans){ print ('Location:002.cgi\n\n'); } else{ print header(-charset => 'Shift_JIS'); ##省略## print endform; { としたのですが、だめでした。 if (param('answer') eq $ans) が 下の方にもう一度出てくるからでしょうか? ###### はじめ ##################### #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); print "Location:1266.cgi\n\n"; ###### おわり ##################### としたら、001.cgi を開くと 002.cgi へ飛ぶことができました。 どこに print "Location:1266.cgi\n\n"; を書けばよいのでしょうか? よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • 振り分けcgiについて

    現在下記のように書かれているcgiでトップページの振り分けをしています。今までは各htmに飛ばしていたのですが、今度モバイルのみcgi へ飛ばしたいのですが、i.htmの部分をmi.cgiと書き換えてもうまく飛びません。どうしたらcgiへ飛ぶようになるのでしょうか? $vjump='.i.htm'; #SoftBank用 $ijump='./i.htm'; #i-MODE用 $ejump = './i.htm'; #EZWEB用 $pcjump = './index.htm'; #PC,その他 $USR = $ENV{'HTTP_USER_AGENT'}; if ($USR =~ /^DoCoMo/) { $lct = $ijump; } elsif ($USR =~ /UP\.Browser/) { $lct = $ejump; } elsif ($USR =~ /^SoftBank/ || $USR =~ /^Vodafone/ || $USR =~ /^J-PHONE/) { $lct = $vjump; } else { $lct = $pcjump; } &go; exit; sub go { print "Content-type: text/html\n\n"; open(IN, $lct); while (<IN>) { print; } close(IN); } exit;

    • 締切済み
    • CGI