- 締切済み
自宅サーバーの構築がうまくいきません。
Linux初心者です。よろしくお願い致します。 webサーバーを公開しようとしているのですがうまくいきません。 OSはubuntuでapacheは2系です。 ルーターを介してindex.htmlをドメインで表示すること(http://ドメイン名)は可能なのですが、AddHandler.cgiにすると500エラーではじかれてしまいます。 以下はtail -fのコマンドで表示される文言です。 ・(2)No such file or directory: exec of 'ディレクトリ/AddHandler.cgi' failed ・Premature end of script headers: AddHandler.cgi 何が原因かわからないのでどなたご指導鞭撻の程よろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- foitec
- ベストアンサー率43% (1080/2457)
まず当たり前のことの確認 Perlのパスの上や前に空白や空行は内ですよね? さてコマンドラインで動作確認したほうがデバッガより良いらしいので コマンドラインで以下を実行してみてください #!/usr/bin/perl<br />print "Content-type text/html\n\n" ;<br />print "test" ;<br /> <html><body><?php echo "test" ; ?></body></html> これが動作しないなら perlのディレクトリ宣言が間違っています。 (上記perlのディレクトリは一例です) これが動けば問題は別です。 忘れていましたが httpd.cof のAddHandler cgi-script .cgiは記述も問題無いようですが もちろん Options ExecCGI は記述してありますよね? どうもAddHandler cgi-script .cgi が正しく設定されていないような気がします。
- Tanigucchi
- ベストアンサー率70% (43/61)
前回( http://qanda.rakuten.ne.jp/qa4424637.html )のエラーも 同じエラーだったように思えますが… AddHandler.cgiには、 print "Content-type: text/html\n\n"; は記述されていますか?
補足
Tanigucchiさん度々ご解答ありがとうございます。 前回と同じというか前回から改善されておりません(汗) print "Content-type: text/html\n\n"; の記述に関しては付け加え、文字をprintするだけのページを作成しているのですがうまくいきません。
- foitec
- ベストアンサー率43% (1080/2457)
Ano1です ANo.3の書き込みは無視してください 自分で削除できましたっけ??
補足
削除はできないようです…。
- foitec
- ベストアンサー率43% (1080/2457)
ANo1です。 FTPで転送しているのであれば(既にご存知でしょうが)ASCIIコードで転送する必要があります。 文字コードがFTPによって自動変換の場合も怪しいのでEUCにしてみるとか・・ >、--を宣言の後につければエスケープできるという記述があった これ -- でOKの例と - でOKの場合とがありますね。 たとえば #! /usr/bin/perl -- または #! /usr/bin/perl - 如何ですか? ところで調べてみたら Premature end of script headersは何か特定の問題を示すに至るエラーではないようです。 何かしらの問題で、結果が正しく出力されないときに出るという物らしいですよ。 なので perl -cwで文法チェックをお勧めします。
補足
foitecさん度々本当にありがとうございます。 ・今プログラムを扱える環境にいないので試すことができないのですが、FTPで送らず端末からサーバーにエディタ(teraterm)でアクセスして書いているのでFTPで送っていませんが、文字コードがutf8なので一応試してみます。 ・ハイフンに関しては両方で試してみましたがだめでした。 ・あと構文チェックではsyntax OKで問題なさそうです。 やはりapache2のcgiの権限付与関連なのかと思うのですが…。
- foitec
- ベストアンサー率43% (1080/2457)
ANo1です。 AddHandelerには拡張子も必要です. AddHandler cgi-script .cgi # と記述していますか? >、--を宣言の後につければエスケープできるという記述があった これ -- ですよ。 たとえば #! /usr/bin/perl -- 如何ですか?
- Wr5
- ベストアンサー率53% (2173/4061)
apache、まともに使っていませんが… >AddHandler.cgiにすると500エラーではじかれてしまいます。 とは、具体的にどんななのでしょう? httpd.confの記述…ですか? AddHandler cgi-script .cgi と、スペースが入るのが正しいはずですが、 AddHandler.cgi と書いているとかではないでしょうか?
補足
Wr5さん解答ありがとうございます。 500エラーではじかれる件ですがinternalsevererrorでwebで見れなく、その時のエラーが ・(2)No such file or directory: exec of 'ディレクトリ/AddHandler.cgi' failed ・Premature end of script headers: AddHandler.cgi です。 index.htmlの時はうまくいったのでドメインとディレクトリの関連付けはうまくいっているのでcgiの実行関連でおかしなことになっていると思います。 httpd.confですがapacheの2系を使用していてconfファイルが細分化されていて何かの記述漏れかとは思うのですが…。 ちなみにご指摘頂いた『AddHandler cgi-script .cgi』の件に関しては設定したつもりなのですが、その設定場所が間違っている可能性はあります。
- foitec
- ベストアンサー率43% (1080/2457)
CGIを実行させるためのプログラム(Perlとか)がみつからない・・ということなので・・ #!/usr/local/bin/perl と指定した場所に perl がないか CGIスクリプトファイルの改行コードがCR+LF(\r\n)になっている。 この場合 #!/usr/local/bin/perl と指定したつもりでも #!/usr/local/bin/perl\r として扱われるらしいですよ。 改行コードをLF(\n)にしてください。 実行ファイルのパーミッションは問題ないですよね?
補足
foitecさん早速の解答ありがとうございます。 >#!/usr/local/bin/perl と指定した場所に perl がないか CGIスクリプトファイルの改行コードがCR+LF(\r\n)になっている。 この場合 ということですが、--を宣言の後につければエスケープできるという記述があったので試してみたのですがうまくいきませんでした。他に\rをエスケープする方法があるのでしょうか? パーミッションは775と755どちらでもだめでした。
補足
foitecさん詳細なご解答ありがとうございます。 >Perlのパスの上や前に空白や空行は内ですよね? これはおそらく大丈夫です。 >#!/usr/bin/perl<br />print "Content-type text/html\n… <body>中の文言ははphpで呼び出しているのでしょうか? >もちろん Options ExecCGI は記述してありますよね? 確かに設定しました。 補足ですがdebian系のapacheが特殊でhttpd.confがダミーファイルになっていたり、各設定が細分化されていたり、web上に模範的なものが少ないことからおそらく設定もれかと思うのですが…。