• ベストアンサー

Apach2でSSIコマンドが実行出来ないのですが教えてください

環境は、自宅サーバ、WindouwsXP、Apache/2.0.53 (Win32) PHP/4.3.10 mod_jk2/2.0.2です。 [httpd.conf SSI関連設定] AddType application/x-server-parsed .shtml AddHandler server-parsed .shtml AddHandler cgi-script .cgi .pl .bat [SHTMLファイル] <HTML><HEAD><TITLE>counttest</TITLE></HEAD><BODY> あなたは<!--#exec cmd="countlog/count.pl" -->人目のお客様です。 </BODY></HTML> [count.plファイル] #!c:/perl/bin/perl $file="C:/ProgramFiles/Apachegroup/Apache2/htdocs /nandemokan/countlog/numfile"; open(FILE, "<$file"); #人数ファイルを読んで 以下省略 http://localhost/nandemokan/index.shtml [SHTML実行結果] あなたは人目のお客様です。 http://localhost/nandemokan/countlog/count.pl [直接SSIを指定した結果] Internal Server Error なお、コマンドプロンプトからcount.plを実行すると 正常にカウンタが出力されます。 ANHTTPDではうまくいったのですが、Apache2で出来なくて困っています。よろしくお願いします。

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

忘れてたのでもうひとつ。 ついでに訂正。 <!--#exec cmd="~" --> ではHTTPヘッダも表示されてしまいます。 HTTPヘッダは不要 <!--#exec cgi="~" --> ではHTTPヘッダは表示されません。 HTTPヘッダは必要 また、サーバーの種類やバージョンによっては、絶対パスが使えなかったりパス名で上位のディレクトリを参照できない等の制限があるそうです。 ついでにexecは危険です。 何らかの方法で <!--#exec cmd="悪意のあるコマンド"--> なんて埋め込まれると厄介なことになります。 なのでカウンターの値の出力なんかに使う時は <!--#include virtual="~" --> でやる方が安全です。 また、Apacheの設定でIncludesではなくIncludesNoExecを使えばSSI自体は有効でもexecを使えなくできます。

kankanmaru
質問者

お礼

SSIコマンドの使い方、注意等大変参考になりました。 ありがとうございました。

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

> http://localhost/nandemokan/countlog/count.pl > [直接SSIを指定した結果] > Internal Server Error count.plにHTTPヘッダ(例 Content-type: text/html)を吐かせないで人数の値だけ吐いていませんか? 「以下省略」の部分が怪しいですね。

kankanmaru
質問者

お礼

ご指摘のとおりでした。修正しましたら、Internal Server Errorはなくなり、カウンタが出力されるようになりました。 これで解決したと喜んだのですが、SHTMLから#execコマンドでcount.plが呼び出しできません。Hello出力のみのCGIプログラムでテストしても同様で、まったく無視されています。まだ別の問題があるようですが分かりません。恐れ入りますが再度お教え願います。

kankanmaru
質問者

補足

すいません、補足にお礼を書かせていただきます。 Apache HTTP Server1.3.33に戻したら、SSIコマンド<!#exec cmd="~/count.pl" --> でcount.plにリンク出来ました。(~の部分はフルパス指定) Apache2ではリンク出来ませんでしたが大進歩です。 Apache2は、confのいじりすぎでおかしくなっているかも知れません。インストールしなおして再度挑戦します。 大変ありがとうございました。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

ディレクトリの設定(<Directory>ディレクティブ)でIncludesは指定しているかな? 具体的にはこんな感じ。ディレクトリ名(フォルダ名)は適当に読み替えてくらはい。 <Directory C:/apache2/htdocs/>  Options FollowSymLinks MultiViews ExecCGI Includes ←ここに「Includes」がないとSSIは無効(多分)  Order deny,allow  Deny from All  Allow from All </Directory>

kankanmaru
質問者

お礼

Apache HTTP Server1.3.33に戻してテストした結果、shtmlファイルに記述したSSIコマンド <!#exec cmd="~/count.pl" --> で、count.plにリンク出来ました。(~の部分はフルパス指定) SSIが使えなく見えたのはcount.plにリンク出来なかったためと思われます。 Apache2のテストではリンク出来ませんでしたが大進歩です。 Apache2環境は、confのいじりすぎでおかしくなっているかも知れません。インストールしなおして再度挑戦します。 大変ありがとうございました。

kankanmaru
質問者

補足

ご返事ありがとうございました。Includes追加してみましたが同じ結果でした。 ーーーーーーーーーーーーーーーーーーーーーーーー エラーメッセージの補足→直接Urlでcount.plを指定するとInternal Server Error (The server encountered an internal error or misconfiguration and was unable to complete your request.-----)となります。 ーーーーーーーーーーーーーーーーーーーーーーーー コマンドプロンプトからcount.plを実行すると 正常にカウンタの内容が出力されます。 ーーーーーーーーーーーーーーーーーーーーーーー SHTMLに#execコマンド以外のSSIコマンドを追加してテストしたら追加分は正常に実行されました。 <HTML><HEAD><TITLE>counttest</TITLE></HEAD> <BODY> <!--#config sizefmt="bytes" --> <!--#config timefmt="%y年%m月%d日 %H:%M " --> 本日は<!--#echo var="DATE_LOCAL" -->です。<BR> あなたは<!--#exec cmd="C:\Program Files\Apache Group\Apache2 \htdocs\nandemokan\countlog\count.pl" -->人目のお客様です。 </BODY></HTML> [出力結果] 本日は05年04月01日 05:11 です。 あなたは人目のお客様です。 ーーーーーーーーーーーーーーーーーーーーーーー 以上から、execコマンドの指定が悪いのか、perlとのリンクが悪いのかApache2の設定が悪いのか分からず困っています。よろしくお願いします。

関連するQ&A