- ベストアンサー
cgiがうまく稼動しません。
【環境】 os Windows XP サーバー Apache2.0.55 perl active perl5.6 お世話になります。Windows環境でApacheでサーバーを立てたのですが、cgiがうまく稼動しません。基本的な設定はconfで設定しています。 実際にcgiにアクセスすると、 Forbidden You don't have permission to access /bbs/xxxx.cgi on this server. と表記されてしまいます。 Windows環境なので、permissionは関係ないと思うんですが。 いろいろ調べたのですが、わかりません。 考えられる原因等、ご教授下されると幸いです。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
> どこをどう設定すれば、wwwroot以下のディレクトリのcgiが使えるのか すみません、一番知りたいこれに答えていませんね。 <Directory "C:/wwwroot"> AddHandler cgi-script .cgi AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> ###です。ScriptAliasの指定は不要です **条件として 1. DocumentRoot "C:/wwwroot/" が指定されている 2. C:/wwwroot/ 以下全てのフォルダ内にcgiを設置できる 3. 同じフォルダツリーに .htmlや画像なども置く 4. CGIは拡張子 .cgi でだけ使えればOK と言う事です。 当然ながらuserdirなど他のフォルダツリーでもCGIを使う場合は 別途 <Directory コンテナによる指定が必要です。
その他の回答 (7)
- umasikajiro
- ベストアンサー率67% (545/803)
まずは http://httpd.apache.org/docs/2.0/howto/cgi.html#configuring を読んで下さい。 そのページにあるようにScriptAlias(ま、よくあるcgi-binですな) の場合はデフォルト状態でCGIが動くようになっています。 CGIを動かすだけならば<Directory "cgiを置くディレクトリ">~</Directory> の設定もAddHandler cgi-scriptも不要です。 で、ScriptAliasに置いたFileは .htmlだろうが.txtだろうが.jpgだろうが CGIとして処理してしまうのでこれが逆に不便な場合も有ります http://oshiete1.goo.ne.jp/kotaeru.php3?qid=2047461 にあるように ScriptAliasの中にCGI以外のFileを置く場合には新たにCGIでは無いことを示すように AddHandlerを設定する場合も有ります (もっとも、わざわざScriptAliasにCGI以外のFileは置くなという意見も多いですが) それやOrder allow,denyによってScriptAliasへの アクセスを制限する場合には<Directory >コンテナに記述する必要があります。 ><Directory "C:/wwwroot/>にしたら、 全体設定によりAddHandler cgi-script .cgiが指定され <Directory コンテナにより Options ExecCGIが指定されていますので当然そうなります #6に対する補足に書かれた設定のままですと C:/wwwroot/home2/bbs/ に例えば #! /perl/bin/perl print"Content-type: text/html\n\n"; print "<HTML><H1>\$0 = $0 </H1>\n"; と言う全く同じ内容のFileを0.cgiと0.txtの2つおきます C:/wwwroot/ にもその2つのFileをコピーしておきます その4つのFileにそれぞれアクセスしてみてください
- umasikajiro
- ベストアンサー率67% (545/803)
> #!C:perl/bin/perl (デフォルトでPerlを入れた場合) #! C:/perl/bin/perl が正解です。perlの前の/が足りません apacheとperlのパーティションが同じC:ならC:であれば #! /perl/bin/perl でもOKです。 http://mm.apache.or.jp/pipermail/newbie/2000-November/000049.html http://mm.apache.or.jp/pipermail/newbie/2000-November/000050.html あとはコマンドラインから C:\wwwroot\home2\bbs>perl -wc hoge.cgi で文法チェックしてみてください。 > 書き直した箇所は ScriptAlias 、、、 ん? ScriptAliasの場合は Options None でも動きますよ Forbiddenに成るはずが無いのですが? 前回はScriptAliasではなく普通のAliasだったということでしょうか? またScriptAliasであればAddHandler cgi-script .cgi も要りません ScriptAliasのディレクトリに入れた全てのFileがデフォルトでCGIと見なされますので
- umasikajiro
- ベストアンサー率67% (545/803)
何度もすみません #4のAllowOverride AllはAllowOverride None に変えてください そのままでも動くけど .htaccessの全許可となってセキュリティ的にまずいので (別の場所からコピーして直し忘れた(^^;)
補足
何度もありがとうございます。 実際に書き直して設定しました。 今度はよくある Internal Server Error が出てしまいました。 一歩前進といった感じではありますが、どうにもこうにもわかりません。 書き直した箇所は ScriptAlias /bbs/ "C:/wwwroot/home2/bbs/" <Directory "C:/wwwroot/home2/bbs/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> です。 それから一応,CGIの一行目のperlパスも #!C:perl/bin/perlなどに書き直して試してみましたが、ダメでした。ここは別にWindowsなら書き直さなくてもかまわないんですかね・・ なにが原因かおさっしつけば、よろしくお願いします。
- umasikajiro
- ベストアンサー率67% (545/803)
う~~んんLocationかあ、、使ってもいいけど http://httpd.apache.org/docs/2.0/ja/mod/core.html#location の注意を読んでからの方がいいかも知れない やはり確実に行うなら Alias /bbs/ "C:/home/bbs/" <Directory "C:/home/bbs"> AddHandler cgi-script .cgi Options ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> みたいに成りますね。
- entree
- ベストアンサー率55% (405/735)
httpd.conf などに以下のような設定を追加してみてください。(全角スペースが含まれているので、下の内容をそのまま貼り付けないでください) AddHandler cgi-script .cgi <Location "/bbs"> Options ExecCGI </Location>
- umasikajiro
- ベストアンサー率67% (545/803)
参考URL を追記
- umasikajiro
- ベストアンサー率67% (545/803)
Options ExecCGI が設定されていないためです 該当する Directory コンテナか 有効な.htaccessで指定してください
補足
ありがとうございます。なんとか動きました。perlのディレクトリをいじって元に戻しておかなかったから、うまくcgiが動かなかったみたいです。 ところで、 ScriptAlias /bbs/ "C:/wwwroot/home2/bbs/" の箇所と <Directory "C:/wwwroot/home2/bbs/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> の箇所はどう違うんでしょうか? 僕が思うには、ScriptAliasが全体の許可するディレクトリで <Directory "C:/wwwroot/home2/bbs/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> の箇所が個別に設定する際に使用するってところなんでしょうか? 今回、<Directory "C:/wwwroot/home2/bbs/">のところを <Directory "C:/wwwroot/>にしたら、 ヴァーチャルホストで運用してる、ほかのHPのcgiも使えるようになったんですけど、設定的にはあっているんでしょうか? どうも間違えているような気がするんですけど。 つまりは、どこをどう設定すれば、wwwroot以下のディレクトリのcgiが使えるのかってことなんですけど。一応、今の設定でも動くのは動くんですけど、これで正しいのか不安なので、よろしくお願いします。 最後にScriptAliasと普通のAliasってどういう意味だったんでしょうか?