• ベストアンサー

SSIからCGIを起動するときのパスの設定

SSIからCGIを起動について他の方の過去の質問を参照させて頂いたのですが解決できず困っております。 index.shtml内からSSIを使用して <!--exec cgi="/cgi-bin/test.cgi"--> と記述してCGIを実行したところ [an error occurred while processing this directive] と表示され実行できませんでした。 エラーログを見たら invalid CGI ref "/cgi-bin/test.cgi" と表示されていました。 試しに「http://ホスト名/cgi-bin/test.cgi」とアドレスに記入して 実行した場合は正常に実行されました。 (「cgi-bin」はhttpd.conf内でScriptAliasで設定してます) またSSIが正常に起動しているかの確認として <!--echo var="DATE_LOCAL"--> を実行してみたところ正常に時刻が表示されました。 「include virtual」も試しましたが結果は同じでした。 「exec cmd」の場合は何も表示されませんでした。 どこの設定・指定が間違っているのか検討がつかない状態で 手詰まり状態になってます。 原因・手がかり等分かる方、ご教授願います。

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

  • ベストアンサー
  • pick52
  • ベストアンサー率35% (166/466)
回答No.6

.htaccessが使用できるならこれでcgiディレクトリのみを ディレクトリ一覧非表示にできますよ。 また、.htaccessが使用できない場合は空のインデックスファイルを 置いておくとそれが優先して表示されるのでディレクトリ一覧は表示 されなくなります。

MOYAJI
質問者

お礼

何度もアドバイスありがとうございます。 前の方の回答でDocumentRootより下位にCGIプログラムを置かなければいけないことがわかったので、 CGIプログラムの置き場所を変更して教えていただいた.htaccessまたは空のインデックスファイルを使用する方法で 検討してみます。 ありがとうございました。

その他の回答 (5)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

>DocumentRootで設定したディレクトリより上位の階層 SSI における 絶対パスのルートは、DocumentRootです。 それより上位にはアクセス権はありません。

MOYAJI
質問者

お礼

回答ありがとうございます SSIからCGIを起動する場合はDocumentRootより下位にCGIプログラムを置かないといけないということですね。検討してみます。 ありがとうございました。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

> 但しこれは意図して表示させています。 > (お客の要求で表示させるという仕様になっているので・・・) > IndexIgnoreを使用してCGIプログラムを表示させないことはできるの > ですがCGIプログラムを1箇所にまとめておきたかったのでcgi-binを > 使用していました。 えっと、結局どうしたいのでしょうか。 HTMLを置いているディレクトリ配下ならSSIも動作するんですよね。 なら例えばHTMLのディレクトリの下にcgiというディレクトリを 掘ってここにCGIをまとめておけばいいんじゃないでしょうか。 ディレクトリ一覧に関しては表示したいのかしたくないのかがよく わかりません。 意図的に表示させるようにしておきながら表示したくないというのは...?

MOYAJI
質問者

お礼

説明不足ですいません。 このサーバー上ではあるプログラムが動作していて、そのプログラムが出力したデータファイルが保存されます。 ディレクトリ一覧で表示させるのはこのプログラムが出力したデータファイルだけでCGIプログラムは見えないようにしたいのです。 (ユーザはデータファイルのみ参照できるようにしたいのです) なのでCGIプログラムはDocumentRootで設定したディレクトリより上位の階層のcgi-binにまとめておこうとしました。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.3

> (但しこの方法だとCGIプログラムがユーザに見えてしまうので > cgi-binディレクトリ配下にCGIプログラムを置いて実行させたいと > 思ってます。) これの意味が分からないのですが、もしかしてインデックスファイルを 置いていない時にディレクトリ一覧が表示されるということでしょうか。 そういう場合は、空のindex.htmlを置いたり、ディレクトリ一覧の 表示を無効にしたりすることで回避できます。 cgi-bin以外でも動作するように設定されているなら上記の方法で いいのではないかと思います。 現在ではcgi-binを使用する方法はあまり主流でないようです。 どこで実行しようともセキュリティ的にはあまり違いないですし、 設定的にもややこしくなりますしね。 CGIだけまとめるという点では利点がありますけど。

MOYAJI
質問者

お礼

再度の回答ありがとうございます。 CGIプログラムがユーザに見えてしまうというのは回答の通りディレクトリ一覧が表示されています。 但しこれは意図して表示させています。 (お客の要求で表示させるという仕様になっているので・・・) IndexIgnoreを使用してCGIプログラムを表示させないことはできるのですがCGIプログラムを1箇所にまとめておきたかったのでcgi-binを使用していました。 まだCGI関連の勉強を始めて間がないのでcgi-binを使用する方法が 主流でなくなっていることは知りませんでした。 CGIプログラムの格納方法についてはもう少し検討してみます。 また他に何か手がかり等ありましたらよろしくお願いします。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

サーバなどによってはSSIではCGIが動作しないこともあるようです。 この辺りの詳細はよく知らないのですが。 あと、例えばドメインが同じであっても内部で別のサーバと 関連付けていて cgi-bin ディレクトリが別のコンピュータに ある場合などは動作させることができないと思います。

MOYAJI
質問者

お礼

回答ありがとうございます。 試しにCGIをindex.shtmlの1つ上の階層に置いて、そのCGIを指定した場合は動作したのでSSIからのCGI起動は動作しているようです。 (但しこの方法だとCGIプログラムがユーザに見えてしまうのでcgi-binディレクトリ配下にCGIプログラムを置いて実行させたいと思ってます。) またcgi-binディレクトリはScriptAliasで設定はされていますが同一サーバ内のディレクトリです。 また他に何か手がかり等ありましたらよろしくお願いします。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

cgi="/cgi-bin/test.cgi" ↓ cgi="./cgi-bin/test.cgi" 相対パスにして試してみてはどうでしょうか。 相対パスで動いたとすれば絶対パスがまずいのだと思いますが、 サーバの設定のどの辺をいじれば絶対パスで動くのかはわかりません。

MOYAJI
質問者

お礼

回答ありがとうございます。 回答の内容も含め、色々なパターンの絶対・相対パスで試してみたのですが現象は変わりませんでした。 また他に何か手がかり等ありましたらよろしくお願いします。

関連するQ&A

専門家に質問してみよう