リダイレクト失敗時のエラー取得(perl)

このQ&Aのポイント
  • CGI(Perl)でリダイレクト失敗時のエラーを取得する方法について教えてください。
  • リダイレクト先のサーバが稼働していない場合、表示されるエラーメッセージをカスタマイズする方法を教えてください。
  • niftyを利用している場合、リダイレクト先のサーバがダウンしているときに表示する別のページを設定する方法を教えてください。
回答を見る
  • ベストアンサー

リダイレクト失敗時のエラー取得(perl)

はじめまして。 リダイレクト失敗時のエラー取得(perl)について質問させてください! CGI(Perl)で、 print "Location: (リダイレクト先URL(他サーバ))\n\n"; としたとき、リダイレクト先のサーバが稼働していなくて、ページが表示 されず、「サーバが見つかりませんでした」などと表示されることがよく あります。 サーバがダウンしているときは別のページを表示するようにしたいのです が、何か方法はあるでしょうかぁ? ●思い当たるキーワードでいろいろ検索してみましたが、該当する物を見 つけられませんでした。 ●下記のコードを試してみましたが、やっぱりダメでした。 →エラーとして認識されず、アドレスバーに他サーバのリダイレクト先URL が表示された状態で「サーバが見つかりませんでした」と表示されまし た。 eval { print "Location: (リダイレクト先URL(他サーバ))\n\n"; }; if ($@) { print "Location: (リダイレクト先URL(自サーバ))\n\n"; } ●「自サーバ」はniftyをしており、niftyではソケット通信が出来ませ ん。 よろしくお願いいたします~!

  • CGI
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

Location: ヘッダに記述し出力した時の動作は、 ・サーバ側(CGI)が、Location: ヘッダをクライアントに返す ・クライアント側(WWWブラウザ)は、Location: ヘッダ付きのデータを受け取ったら、改めてそのURLにアクセスする という流れになります。リダイレクト先のサーバ側が生きていようが死んでいようが、Location: ヘッダの出力そのものはただの文字列ですので、それに失敗することはありません。 (そのため、例としてあげられたコードは、サーバのチェックとしてまったく意味がありません) CGI側でリダイレクト先のサーバが生きているかどうか調べるには、 実際にそのサーバにアクセスしてみるしかないです。 CGI側でソケット通信が出来るのであれば、それでアクセスできますが、 それが無理となると、サーバの生死確認は不可能です。

vakaya
質問者

お礼

早速のご回答、ありがとうございました。 やはり、ムリなのですね(T_T) どうもありがとうございました~。

関連するQ&A

  • PHPとPerlのリダイレクト

    こんにちは。 PHPとPerlのリダイレクトの処理ついて質問です。 PHPのリダイレクトには、exit;を付けないとその後の処理も行ってしまいます。 header("Location:index.php"); exit; Perlのリダイレクトにも、このexit;は必要でしょうか? print "Location:index.cgi\n\n"; exit; ← ? 以上です。 どうぞよろしくお願いします。

    • ベストアンサー
    • 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-CGI] LWPを使った際リダイレクトされたか否かを知る方法について

    下記のように、任意のホームページを取得してそれを出力するプログラムがあるのですが、リダイレクトで引越しされたホームページにアクセスしても、特に問題なく表示されます。 できれば、リダイレクトされた場合であれば、次から本当のURLにアクセスしたいためそのホームページを記録したいのですが何か良い方法は無いでしょうか? ご存知の方、教えていただけ無いでしょうか? 宜しくお願い致します。 -CGI---------------------------------------------------- #!/usr/bin/perl print "Content-Type: text/plain\n\n"; $url = 'http://URLを入れる'; use LWP; use HTTP::Cookies; $file = "cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; __END__ if(リダイレクトされたならば){ open (OUT,">>RedirectLog.txt"); print OUT $url."\n"; close(OUT); } -CGI----------------------------------------------------

    • ベストアンサー
    • CGI
  • PerlのLocation:が文字として出力されてしまいます

    Perl/CGI内でボタンを配置し、そのボタンを押すとサブルーチンにあるprint "Location: $戻り先\n\n";でジャンプするようにしたいのですが、 「Content-type: text/html」より後にLocationを使うとジャンプせずに画面に文字として「Location: $戻り先」と表示されてしまいます。 このような場合どうすればよいのでしょうか?

    • ベストアンサー
    • CGI
  • Firefox ページのリダイレクト設定エラー

    Firefox2.0.0.2で、特定のリンク先で「ページのリダイレクト設定が正しくありません。 このアドレスのリクエストに対するサーバのリダイレクト設定がループしています。」というエラーが出て表示できません。 ブラウザを再起動すると、表示出来ます。 Cookieは許可しています。 よろしくお願いします。

  • 301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動

    301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動しました。となってしまいます。 301リダイレクトさえできれば どのような方法でもできればいいのですが色々試してみても サイトが移動しましたと表示されています。 ■cgiで行ったこと print "Status: 301 Moved Permanently\n"; print "Location: http://******.co.jp/\n\n"; exit; ■PHPで行った事 header("HTTP/1.1 301 Moved Permanently"); header("Location: http://******.co.jp/"); ■apacheで行った事 RewriteCond %{HTTP_HOST} ^(*****\.com)(:80)? RewriteRule (.*) http://******.co.jp/[R=301,L] 1つ1つ別にやってみましたが、最後にスラッシュを入れる、絶対パスをいれても 表示されてしまいます。 302リダイレクトはどうしても入れることが出来ないので 大変困っております。 どうぞ宜しくお願い致します。

  • このサイトで無限リダイレクトが時折発生することがありますが、なぜですか

    このサイトで無限リダイレクトが時折発生することがありますが、なぜですか? マイページを開こうとしたり、新たに質問を作成したりしようとすると、無限リダイレクトが発生する事があります。 --Safari 4.1.1でのエラーメッセージ例です-- “http://c.oshiete.goo.ne.jp/externalauthentication?jump_to=http%3A%2F%2Fc.oshiete.goo.ne.jp%2Foshiete_search.php3%3Fc%3D517” を開こうとして多くのリダイレクトが発生しています。あるページへのリダイレクトが設定されているページを開いたときに、リダイレクト先のページから元のページにさらにリダイレクトが設定されている場合にこうした現象が起きる場合があります。 --ここまで-- 一度、これを管理側に問い合わせをした事があるのですが、サーバーの混雑とか異常、というような一辺倒な回答しか貰えず、今ひとつ理解の出来ないままでした。 真っ昼間とか早朝など、混雑が起きそうにもない時間帯にまで、ひょっこりとこの障害が起きることもあります。 そもそも、混雑が起きる場合ならば、普通のサーバエラーが起きたり、何分待てど希望するページが出て来ない、一回のみリダイレクトされ、エラー画面ページに遷移する、なら分かるのですが、グルグルと無限リダイレクトになる理由が分かりません。 HTMLの読込みデータがエラーで化けたからといって、それがリダイレクトになるとも思えません。 リダイレクト先のURLがない、なら移動するときに正しいURLがエラーで読まれなかった、と思うのですが、なぜ無限リダイレクトなのかと思います。 上述のエラーはSafariを参考に出しましたが、他のブラウザでも同様の現象が確認出来ています。 なぜ、時折無限ダイレクトが発生するのでしょうか?

  • perlのパスに-wをつけないと500エラーに

    お世話になります。 サーバー会社のトラブルで移転しなければならなくなったのですが、 移転後、cgiの挙動がおかしくなってしまいました。 バージョンperl5.8.8 サーバーOS CentOS なぜかperlのパスに-wをつけないと500のエラーになってしまう状態 #!/usr/local/bin/perl -w print "Content-type: text/html\n\n"; print "test"; これだけのスクリプトでも -wをつけないと500エラーになってしまいます。 -wをつけると動作します。 以前、稼働していたcgiもすべて-wをつけないと稼働しなくなってしまいました。 考えられる原因はどのような事がございますでしょうか。 (root権限のある専用サーバーとなります) 四苦八苦しているのですが、どうしても解決できない為、何卒宜しくお願い致します。 他に必要な情報などございましたらご指摘いただけますと幸いです。

    • ベストアンサー
    • Perl
  • エラー表示

    CGIがエラーを出すと、サーバーが500番エラーを表示しますよね。 そのページを.htaccessのErrorDocumentを使って、自分で定義したものにできたのですが、そのエラーページをCGIにして、どこかにエラーになったページが吐いたエラー出力が入ってないかと思ったのですが、入ってないのでしょうか? -------- #!/usr/bin/perl # hoge.cgi # エラーするCGI die "hoge!"; -------- #!/usr/bin/perl # error.cgi # 500エラーページなCGI print "$_: $ENV{$_}<br>\n" foreach(sort keys %ENV); # ここでもない print foreach(<STDIN>); # ここでもない print foreach(<STDERR>); # ここでもない print ・・・どこかに "hoge!" が入ってないでしょうか? -------- # .htaccess ErrorDocument 500 /error.cgi Apache/1.3.24 Server perl 5.005_03 built for sun4-solaris

    • 締切済み
    • CGI
  • PerlでHTTPヘッダの\nを外すとエラー

    【PerlでHTTPヘッダの最後の\nを1つでも外すとエラーになります】 初歩的なことですみません。 HTTPヘッダーの最後の\n\nなんですが、ヘッダーの文字列の後に改行が2つ?? と思って この\nを外して、 print "content-type:text/html;charset=utf-8"; とすると、「500 Internal Server Error」 print "content-type:text/html;charset=utf-8\n"; と\nが1つでも 「500 Internal Server Error」 となります。 「\n\n」と2つあればエラーにはならないんですが、なぜ必ず2つ必要なのでしょうか?これは改行が2つって意味ですかね? print "<html>\n"などの\nはソース上やコンソール出力結果上での改行なのはわかります。 この\nは改行したくなければ書かなくてもエラーになりませんよね。(当たり前ですが・・ #!/usr/bin/perl print "content-type:text/html;charset=utf-8\n\n"; ←HTTPヘッダーの\n\n print "<html>\n"; print "<body>\n"; print "<p>テキスト</p>\n"; print "</body>\n"; print "</html>\n";

    • ベストアンサー
    • Perl

専門家に質問してみよう