OSXでcgiを動かすための設定方法

このQ&Aのポイント
  • OSXでperlで作ったcgiを動かすための設定方法について調査しています。
  • 試した設定ではブラウザからアクセスするとForbiddenエラーが発生してしまいます。
  • 他にもOSXでcgiを動かすために必要な設定があるのか知りたいです。
回答を見る
  • ベストアンサー

OSXでcgi

OSXでperlで作ったcgiを動かしたいと思い色々といじってるのですが全く動きません。 apacheのhttpd.confの設定で AccessFileName .htaccess AddHandler cgi-script .cgi AddHandler cgi-script .pl についてはコメントをはずして使えるようにして Perlのパスも#!/usr/bin/perlとしてsiteフォルダとcgiを置いてるディレクトリに.htaccessを下のように記述して作り AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .cgi/ パーミッション設定をちゃんとしてあげてるのですがブラウザからアクセスするとForBiddenとでてしっかりと設定してるはずのパーミッション設定が間違ってますと言われてしまいます。 OSXでcgiを動かすには他にももっと色々と設定しなければダメなんでしょうか?

  • Mac
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • jakarta
  • ベストアンサー率38% (607/1597)
回答No.3

いちおやり方ですが、httpd.confの430行あたりの<Directory>の ところを書き換えます。 #<Directory /home/*/public_html>から始まるコメントアウトされた ひと固まりのところをコピーしてから作業すればよいでしょう。 以下はユーザディレクトリのSiteフォルダの中にcgi-binという フォルダを作成し、そこでCGI,SSIを実行可能にさせる例です。 <Directory /Users/*/Sites/cgi-bin>   AllowOverride All   Options Includes   Options ExecCGI </Directory> <Directory>のオプションについてはリンク先を参考にしてください。

参考URL:
http://www.zdnet.co.jp/help/tips/linux/l0340.html
Gaultier
質問者

お礼

422行目の <Directory /home/*/Sites/> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> をjakartaさんの言うとおりに書き換えてapacheを再起動したのですが 相変わらずエラーログに Options ExecCGI is off in this directory: /Users/*/Sites/cgi-bin/treebbs.cgi とでます(-"-;

Gaultier
質問者

補足

えぇっと、教えて頂いたHPを見ながら <Directory /home/*/Sites/> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch Includes ExecCGI <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> として、元の設定にExecCGIとSSI許可に設定しなおしても同じエラーが出てしまいます。

その他の回答 (2)

  • jakarta
  • ベストアンサー率38% (607/1597)
回答No.2

>Options ExecCGI is off in this directory:/Users/****/Sites/bbs/bbs.cgi って、言う風に出てます(^^; これは単にユーザーディレクトリでCGIが有効になってないということです。 つまりForBiddenが出るのはユーザーディレクトリでCGIの実行が 許されてないということではないでしょうか。 <Directory></Directory>部分にUserDirectoryの設定を追加し ExecCGIと一文を足せばよいと思います。 Usersのディレクトリで動作を確認する前に /Library/WebServer/CGI-Executables 以下においてCGIが動く設定に なっているか確かめてみて下さい。 それとサンプルのCGIファイルはもちろん単なるテキストファイルなので catしただけでTerminalが止まるようならこのこと自体がそもそも おかしいと思われます。

Gaultier
質問者

お礼

cgi動きました!! httpd.confにばっかり気を取られてて/etc/httpd/users/*.confを書き換える事を見落としてました(^^;;; /etc/httpd/users/*.confを書き換えてやると今までの苦労が嘘のように快適にcgiが動いてます(^^;;;; 丁寧な説明ありがとうございました<(* _ _)>

  • jakarta
  • ベストアンサー率38% (607/1597)
回答No.1

AddHandler cgi-script .cgiはコメントを外し、単純に #!/usr/bin/perl print "hello"; というものをブラウザからチェックしてみましたがエラーがでますね。 %tail -f /var/log/httpd/error_log malformed header from script. Bad header=hello: /Library/WebServer/CGI-Executables/test.cgi サンプルをcatしてみたら # CGI programs must print their own HTTP response headers という記述があります。 そこで以下のように書き換えたらOKでした。 #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "hello"; headerを返さずに出力するように変える事もできるは思うんですがちょっと すぐにお答えできません。

Gaultier
質問者

補足

えぇっと、私の方ではエラーログには Options ExecCGI is off in this directory:/Users/****/Sites/bbs/bbs.cgi って、言う風に出てます(^^; ついでに、 perl -cw bbs.cgi での文法チェックもしてみたのですが何処もおかしくないと出ます。 後、catすると虹色の円盤がずっと出てTerminalが止まっちゃうのでやってません(^^;;

関連するQ&A

  • .htaccessの中身が php5 CGI版で動かない

    拡張子htmlファイルをphpファイルと認識させる為に、 .htaccessで AddType application/x-httpd-php .html AddHandler x-httpd-php .html と書いて対応していました。 今まではサーバーのphpのバージョンがPHP4(DSO版)だったのですが、昨日サーバーのバージョンがPHP5(CGI版)になってから、上記のような.htaccessが機能しなくなってしまいました。 order deny,allow deny from all ↑ これはちゃんと動くので、.htaccess自体が拒否されてるみたいなことはないと思います。 AddType application/x-httpd-php .html AddHandler x-httpd-php .html ↑ このプログラムがPHP5 CGI版にて意図した動作とならないのです。 何か分かる方いらっしゃいましたら、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • LinuxのapacheでCGIが動かない

    RedHatLinux7でイントラネットでWebサーバーを構築しました(apache)で、CGIを動かしたいのですが、動きません。あるサイトで「httpd.conf の AddHandler cgi-script .cgiを生かせばいい」となっていたのでそうしましたが、まだ動きません。あと何を設定すれば良いのですか?(CGIのパーミッションはちゃんとしています。)httpd.confにCGIの記述が他にもありましたが意味がわからずそのままにしています。

  • 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
  • CGIの設置.htaccessの設定について。

    windows7 32bitでapacheとperlでwwwサーバを構築しています。 初心者です。apacheは2.2.25でactive perlは5.16.3.1です。 例えば C:\wwwのフォルダに.htaccessに <Directory "D:/www1"> AllowOverride non </Directory> という記述と AddType application/x-httpd-cgi .cgi という記述で二つのルールを設定したいとしたら、 .htaccessにはどのように記述したらよいのでしょうか。 同じディレクトリに2個の.htaccessは入れられませんよね?

  • PHPのコードがそのまま表示されてしまう。

    同じようなメール内容ですみません。 過去のものを見て回りましたが、うまく理解できませんでした。 標記のとおりPHPのプログラムがそのままブラウザに表示されてしまうので困っています。 まずファイル構造はこのようになっています。 httpdocs | ---------index.php   |----.htaccess これだけです。この「index.php」にアクセスすると、携帯キャリア別にページを移動させるプログラムです。 ほかのサーバーでテストしたら稼動しましたでのプログラムには問題ありません。 次に.htaccessの設定は下記のようになっています。 Options +ExecCGI AddHandler cgi-script .cgi AddType application/x-httpd-cgi .cgi AddType application/x-httpd-php .php こちらの質問を試してみましたが、 apacheの設定ファイル(httpd.conf)とPHPの設定ファイル(php.ini)の設定は、私が管理者でないので操作することはできませんでした。 http://oshiete1.goo.ne.jp/qa2855291.html どなたか宜しくお願い致します。

    • 締切済み
    • PHP
  • PerlのCGIとPHPを

     特定のディレクトリのCGIの中にPHP(Apacheのモジュール版)を書き、(CGIで<?php~?>とHTMLを出力させる)Perl/CGIを実行したときにその出力の中に含まれるPHPを実行させたくて、.htaccessに AddHandler application/x-httpd-php cgi AddHandler cgi-script .cgi を書いたのですが、どうやらPHPのAddHandlerの後に書かれているCGIの方が優先され、PHPが実行されず、CGIのみが実行されます。  順序を逆に書いても、今度はPHPが優先されてしまい、どちらか片方しか実行されません。  どうすれば、両方同時に実行させられるでしょうか、教えてください。  それが不可能ならば、とりあえずPerl/CGIからPHPを呼び出して先に実行させるようなことができるのならば教えてください。  ちなみに、httpd.confには拡張子cgiをすべてのディレクトリでCGIとして実行、拡張子phpもすべてのディレクトリでPHPとして実行させるようにAddHandlerされています。 Apache/2.0.58(Windows版) PHP/5.1.6 CGI: ActivePerl 5.88 です。

    • ベストアンサー
    • PHP
  • 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
  • fedora core3でCGIがソースコードで表示されてしまいます。

    document root("var/www/html")でCGIを使うために、httpd.confの設定で#Addhandler cgi-script →Addhandler cgi-script , と書き直し、<Directory"var/www/html">のoption項目にExecCGIと追加しました。 アクセスするときはlocalhost/***.cgiとしています。 cgi fileのperlのパスが#!/usr/bin/perlとなっているのでその場所にちゃんとperlがあるかも確認しました。 .cgiファイルはWindowsXPからASCIIで転送したものです。.httpd.confの設定以外はデフォルトの状態です。 何日間か試行錯誤したのですが、うまくいきません。どうかご助言お願いします。

  • activeperl5.6が起動できない

    activeperl5.6が動きません。 activeperlをインストールして、apacheのhttpd.confの中身を本を参考に編集しました。 sampleのhello.plというファイルを自分の環境ではc:\www\cgi-binというフォルダーの中にいれ、 ScriptAlias /cgi-bin/ "C:/www/cgi-bin" <Directory "C:/www/cgi-bin"> AllowOverride None Options None AddHandler cgi-script .cgi .pl でcgiの実行を許可して AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl で拡張子とperlを関連付けています。 browserからたとえばhttp://localhost/hello.plを入力すると 実行が許可されていないとブラウザーで表示されます。 Forbidden You don't have permission to access /test.pl on this server. Apache/1.3.39 Server at localhost Port 80 アパッチのエラーログを見ると、 [error] [client 127.0.0.1] couldn't spawn child process: c:/

    • ベストアンサー
    • CGI
  • CGIモードのphpスクリプトが400で動くわけ

    さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

    • 締切済み
    • CGI