リダイレクト失敗時のエラー取得(perl)
- 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ではソケット通信が出来ませ ん。 よろしくお願いいたします~!
- vakaya
- お礼率20% (1/5)
- CGI
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Location: ヘッダに記述し出力した時の動作は、 ・サーバ側(CGI)が、Location: ヘッダをクライアントに返す ・クライアント側(WWWブラウザ)は、Location: ヘッダ付きのデータを受け取ったら、改めてそのURLにアクセスする という流れになります。リダイレクト先のサーバ側が生きていようが死んでいようが、Location: ヘッダの出力そのものはただの文字列ですので、それに失敗することはありません。 (そのため、例としてあげられたコードは、サーバのチェックとしてまったく意味がありません) CGI側でリダイレクト先のサーバが生きているかどうか調べるには、 実際にそのサーバにアクセスしてみるしかないです。 CGI側でソケット通信が出来るのであれば、それでアクセスできますが、 それが無理となると、サーバの生死確認は不可能です。
関連する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リダイレクトはどうしても入れることが出来ないので 大変困っております。 どうぞ宜しくお願い致します。
- 締切済み
- その他(ITシステム運用・管理)
- このサイトで無限リダイレクトが時折発生することがありますが、なぜですか
このサイトで無限リダイレクトが時折発生することがありますが、なぜですか? マイページを開こうとしたり、新たに質問を作成したりしようとすると、無限リダイレクトが発生する事があります。 --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を参考に出しましたが、他のブラウザでも同様の現象が確認出来ています。 なぜ、時折無限ダイレクトが発生するのでしょうか?
- ベストアンサー
- このQ&Aコミュニティーについて
- 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 ハッシュ エラー
現在perlの勉強中で、ハッシュの項目まできました。しかし、use strictにするとこのコードがエラーになります。 #!/usr/bin/perl use strict; use warnings; print "Content-type:text/html\n\n"; $hoge{"key1"} = "value1"; print $hoge{"key1"}; exit; ヴァージョンは5.8.9です。use strictをコメントアウトすればエラーはでません。どうしてエラーになってしまうのでしょうか?どうすればエラーを出さずに表示することができるのでしょうか?どうかご教授ください。よろしくお願いします。
- ベストアンサー
- Perl
お礼
早速のご回答、ありがとうございました。 やはり、ムリなのですね(T_T) どうもありがとうございました~。