• ベストアンサー

apacheでcgiがうまく動かない。cgiが認識されていない?

すいません、多分基本的な所なのですが、 どうしても分からないので質問させてください。 ■環境------------------------------ ・windowsXP sp2 ・apache1.3.33 C:\Program Files\Apache Group\Apache  現在の状態:html表示可能。httpd.confを変更 ・perl5.6.1 c:\perl  現在の状態:PPMにてimagemagick,DBI,DBD-MySql(だっけ)をインストールしている ・php5.0.4 c:\php ・mysql4.02 C:\mysql ■httpd.confの変更箇所-------------------------------- 337 Options Indexes FollowSymLinks MultiViews ↓ Options Indexes FollowSymLinks ExecCGI MultiViews 538 #!c:/program files/perl/perl ↓ #!C:/Perl/bin/perl 720以降に追加 AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl 825以降に追加 AddHandler cgi-script .cgi AddHandler cgi-script .pl ■printenv.plの内容-------------------------------- #!C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } -------------------------------------------------- 上記のような環境で、いまPERLの動作確認を行っています。 http://localhost/cgi-bin/printenv.pl http://localhost/cgi-bin/printenv.pl PLファイルを指定しても実行されず、ダウンロードされてしまいます。 cgiに拡張子を変えても同じでした。 エラーというわけでもない為、エラーログにも何もかかれません。 何が問題なのでしょうか?

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

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

  • ベストアンサー
noname#205944
noname#205944
回答No.2

1. htdocsではなく、cgi-binでの実行のようなので ScriptAlias のコメントアウトははずしました? 2. http://127.0.0.1/cgi-bin/printenv.pl ではどうでしょう Windowsでしたら、たまにIISが関係してくるようですよ

abu_kame
質問者

お礼

回答ありがとうございます。 HTMLをおける場所でもCGIをおいて実行させたかったのです。 なのでhtdocsにExecCGIをつけたのですが、うまくいきませんでした。 やりたかったことの一つとしてMovableTypeをいれたかったので、http://pooneil.sakura.ne.jp/archives/2005/06/movable_typexp_1.html を参考に環境構築し、無事実行できました。 お騒がせしました。

その他の回答 (1)

  • carroll
  • ベストアンサー率61% (13/21)
回答No.1

cgi-binフォルダ内のファイルはデフォルトでCGIとして動作するのでhttpd.confはいじらなくてもPerlスクリプトの1行目のパスを書き換えるだけで動作します。 質問の件ですが >720以降に追加 >AddType application/x-httpd-cgi .cgi >AddType application/x-httpd-cgi .pl この部分が問題だと思われるのでこれを削除してApacheを再起動させてみてください。

abu_kame
質問者

お礼

回答ありがとうございます。 2行を消して、DOSプロンプトから net stop apache net start apache を実行して再起動しました。(なぜかapacheにrestartとかが無いのです、、、) しかし、ダウンロードされます。 次にOSを再起動して実行しましたがダメでした、、、 ちなみに337行目の変更はhtdocsの配下でCGIを実行したいからです。

関連するQ&A

  • apache1.3とperlでCGI

    超初心者です。 windows XPでapache1.3 と active perl 5.1.2をインストールして、 CGIを動作させたいと考えています。 http://localhostを入力してapacheの起動画面は表示されていること を確認しました。 その後httpdconfに下記を追加しました。 AddHandler cgi-script .cgi .pl AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl <Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> C:\Program Files\Apache Group\Apache\cgi-binに既存で存在する printenv.plを実行しようとするとファイルのダウンロードの画面が出てきて 実行されません。printenv.plは下記のようにperl.exeへのパスだけ変更しました。 #! C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } どうすればCGIが実行できるようになるのでしょうか? ご教授ください。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • apache でバイナリのCGIを動かすには

    apache でバイナリのCGIを動かすにはどうすればよいのでしょうか? (なお、プログラム自体に問題は決してありません。『HTTPD』を使うと問題なく動作します) OS:WIN98 C++バイナリのCGIを呼び出すと下記エラーとなります。 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please .... the error. More ... log. - Apache/1.3.12 Server at http://127.0.0.2/ Port 80 最終アクセスログ 127.0.0.1 - - [12/Mar/2001:23:20:27 +0900] "GET /ab.cgi HTTP/1.1" 500 610 最終エラーログ [Mon Mar 12 23:20:25 2001] [error] [client 127.0.0.1] Premature end of script headers: e:/www.homepage/kokucho81/ab.cgi apache の httpd.conf と httpd.conf.default との比較 ** httpd.conf ServerName http://127.0.0.2/ ** httpd.conf.default #ServerName new.host.name ** httpd.conf DocumentRoot "E:/WWW.HOMEPAGE/KOKUCHO81" ** httpd.conf.default DocumentRoot "C:/Apache/htdocs" ** httpd.conf <Directory /> Options FollowSymLinks ExecCGI AllowOverride None ** httpd.conf.default <Directory /> Options FollowSymLinks AllowOverride None ** httpd.conf <Directory "E:/WWW.HOMEPAGE/KOKUCHO81"> ** httpd.conf.default <Directory "C:/Apache/htdocs"> ** httpd.conf Options Indexes FollowSymLinks ExecCGI ** httpd.conf.default Options Indexes FollowSymLinks MultiViews ** httpd.conf AddHandler cgi-script .cgi ** httpd.conf.default #AddHandler cgi-script .cgi そもそも、設定が足りてないんでしょうか? apacheを良く使う方、よろしくお願いします。m(_ _)m

  • CGI

    MacOS10.10のApache2でCGIが動きません。 httpd.confの最後にこう記述してます。 <VirtualHost *:80> DocumentRoot "/Users/ユーザー/Sites/www" ServerName ドメイン <Directory /Users/ユーザー/Sites/www> AllowOverride All Options Indexes MultiViews ExecCGI FollowSymLinks AddType application/x-httpd-cgi .cgi .pl AddHandler cgi-script .pl .cgi DirectoryIndex index.html index.htm index.cgi </Directory> </VirtualHost> 記述は合ってると思うんですが……どこが間違ってるのでしょう?

    • ベストアンサー
    • Mac
  • apacheのCGI設定について教えてください。

    CGIの勉強のために、古いパソコンに fedora core 4 をインストールしてapache でローカルのテスト用サーバーにしようとしています。 /var/www/html に設置した簡単な perl CGI は動くのですが、同じものをユーザーのホームディレクトリに設置すると、internal server error になってしまいます。 ***** 以下 httpd.confの抜粋です。***** #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride All Options Includes ExecCGI FollowSymLinks SetHandler cgi-script </Directory> AddHandler cgi-script .cgi .pl ************************************** サーバーのエラーログを見ると Premature end of script headers: test.cgi となっています。htmlをprintしているだけのスクリプトで、/var/www/html では動くので、apache の設定の問題かと思っています。 ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • apacheでhttpsによって外部からアクセスさせたい

    windowsserver2008でapache2.2.6を動かしてます。 httpd.confとhttpd-ssl.confを編集して、 LAN内から http://server/index.html https://server/cgi-bin/printenv.pl でアクセスできます。 外部から http://domain.jp/index.html でアクセスできるのですが、 https://domain.jp/cgi-bin/printenv.pl だと404エラーが表示されます。 サーバー上でnetstat -aすると、443はLISTENになってます。 外部からhttpsによるアクセスを可能にするために確認すべきこと、 あるいは、アクセスできる方法をご存じの方教えてください。

  • apache2付属のテストスクリプトで不明な点が

    Windows版apache2に付属している、cgi-binディレクトリの中にあるprintenv.plという環境変数の一覧を表示するスクリプトについて分からないところがあります。以下がそのスクリプトの内容です。 1#!c:/Perl/bin/Perl.exe 2print "Content-type: text/plain\n\n"; 3foreach $var (sort(keys(%ENV))) { 4 $val = $ENV{$var}; 5 $val =~ s|\n|\\n|g; #ここと 6 $val =~ s|"|\\"|g; #ここです 7 print "${var}=\"${val}\"\n"; 8} 上の二行5,6はどういうことをやっているのでしょうか? 正規表現を使って文字を置き換えているというのは分かるのですが、どうしてこれらを置き換えるのかが分かりませんでした。5をコメントアウトして実行してみると、する前と比べて違う点に一点だけ気づきました。実行結果の一覧の中に、SERVER_SIGNATUREという環境変数があるのですが、これの値の最後に\nがすでにあり、これが改行と判断されてしまうことを避けるためにこの行があるのだと考えました。しかし6についてはさっぱり意図が分かりません。そもそもこの行をコメントアウトするがしまいが実行結果は見た限り変化しませんでした。 整理しますと、 WindowsXPにおける環境変数SERVER_SIGNATUREにはなぜ\nが最後に含まれているのでしょうか? また、6の行は一体何をやっているのでしょうか? 皆様よろしくお願いします。

    • ベストアンサー
    • Perl
  • apacheのCGI設定

     pc9821にFreeBSD(98)をいれapache1.3を起動させています。cgiはlight.cgiというソフトをつかっています。なかなかcgiがうまくいきません。参考ページには public_html / index.html (トップページ) | +-- bbs / light.cgi [755] | admin.cgi [755] ・・・・(省略) +-- lock [777] / | +-- past [777] / 0001.cgi [666] とかかれていますが、実際に私のサーバーにはpublic_htmlというフォルダは存在していなくて /usr/local/www/cgi-binにbbsというフォルダをつくり あとは上のようにしています。またindex.htmlは/usr/local/www/dataのなかにいれて表示してWebサーバーとしてはたらいています。またapacheの/usr/local/etc/apacheのhttpd.confは 関係ありそうな行だけあげると ServerRoot "/usr/local" DocumentRoot "/usr/local/www/cgi-bin" <Directory "/usr/local/www/cgi-bin/bbs"> Options Indexes FollowSymLinks MultiViews <location "/cgi-bin/"> Options ExecCGI AllowOverride AuthConfig Limit Order allow ,deny Allow from all </Location> <IfModule mod_mime.c> TypesConfig /usr/local/etc/apache/mime.types ADDHandler cgi-script .cgi </IfModule> ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" <Directory "/usr/local/www/cgi-bin/bbs"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi どこがおかしいのかおしえていただけないでしょうか?

    • ベストアンサー
    • CGI
  • Windows環境でのCGI設定について

    Windows+ApacheでCGIを設定する際の質問です。 「c:\webroot」というディレクトリをDocumentRootにして その下に「sample」というディレクトリを作成し、 そのディレクトリの中にCGIとHTMLを配置したいと考えています。 試しにc:\webroot\sample\printenv.cgiというcgiを 配置してhttpd.confを以下の様に設定しましたが、 以下のURLでアクセスしてもCGIは実行されません。 http://localhost/sample/printenv.cgi (※printenv.cgi自体はScriptAliasがcgi-binの状態では   実行されているのは確認しています。) 恐らく設定のいくつかが間違っている為と 思いますのでアドバイスして頂けたら幸いです。 ================================================ Alias /sample/ "C:/webroot/sample/" <Directory "C:/webroot/sample/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all DirectoryIndex index.htm index.html </Directory> ScriptAlias /sample/ "C:/webroot/sample/" <Directory "C:/webroot/sample"> AllowOverride None Options None Order allow,deny Allow from all </Directory>

    • ベストアンサー
    • CGI
  • Apacheの設定について

    WindowsXP SP2 のローカルでCGIを動作させるために  http://www.adminweb.jp/apache/ を参考に下記を試みました。 (1)Apache ダウンロード・インストール・接続確認   「http://localhost/」へアクセスして「It works!」表示確認    (htdocs ディレクトリの index.html) (2)ActivePerlインストール    perl -v perl -h で動作確認 (3)CGI用エイリアスの設定    ScriptAlias /cgi-bin/ "C:/SERVER/Apache/cgi-bin/" (4)以下の test.pl を C:/SERVER/Apache/cgi-bin/ に設置    ------------------------------------------------------    #!C:/Perl/bin/perl.exe print "Content-type: text/html;\n\n"; print "<html><body><h1>test cgi</h1></body></html>\n";   -------------------------------------------------------    http://localhost/cgi-bin/test.pl の実行で    「Internal Server Error」になってしまいます。 どこの設定が間違っているのか見当がつきません。 何卒ご指導宜しくお願い致します。

  • Apache2.0とActivePerl5.8でCGIが動作しない

    ご教授願います。  掲題の通り、Win2000ProにApache2.0.48、ActibePerl5.8.1.807をインストールしローカル上にてApacheの動作確認は出来ました。  色々なサイトを調べ、現在のhttpd.confは下記のような設定となっています。 【httpd.confの主な変更点】  1:DocumentRootは別ドライブのフォルダ(C:ではない)に変更(httpd.confのファイル、229行目あたり)  2:同様に<Directory>も1と同じフォルダ(httpd.confのファイル、255行目あたり)  3:Options Indexes FollowSymLinks MultiViews ExecCGI Includesと変更(httpd.confのファイル、269行目あたり)  4:ActivePerlのインストール先は「C:/usr/local/」です。  5:test.cgiの格納場所は1で指定したフォルダと同じです。 【症状】  ブラウザのアドレスに「http://localhost」を入力するとApacheの動作確認画面が出ますが、「http://localhost/test.cgi」を入力すると『Forbidden You don't have permission to access/test.cgi on this server」と表示されます。 知識不足で申し訳ございませんが、よろしくお願いいたします。