プロが教えるわが家の防犯対策術!

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」の場合は何も表示されませんでした。

どこの設定・指定が間違っているのか検討がつかない状態で
手詰まり状態になってます。
原因・手がかり等分かる方、ご教授願います。

A 回答 (6件)

.htaccessが使用できるならこれでcgiディレクトリのみを


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

何度もアドバイスありがとうございます。

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

ありがとうございました。

お礼日時:2008/09/05 14:30

>DocumentRootで設定したディレクトリより上位の階層


SSI における 絶対パスのルートは、DocumentRootです。
それより上位にはアクセス権はありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

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

ありがとうございました。

お礼日時:2008/09/05 14:27

> 但しこれは意図して表示させています。


> (お客の要求で表示させるという仕様になっているので・・・)
> IndexIgnoreを使用してCGIプログラムを表示させないことはできるの
> ですがCGIプログラムを1箇所にまとめておきたかったのでcgi-binを
> 使用していました。

えっと、結局どうしたいのでしょうか。

HTMLを置いているディレクトリ配下ならSSIも動作するんですよね。
なら例えばHTMLのディレクトリの下にcgiというディレクトリを
掘ってここにCGIをまとめておけばいいんじゃないでしょうか。
ディレクトリ一覧に関しては表示したいのかしたくないのかがよく
わかりません。
意図的に表示させるようにしておきながら表示したくないというのは...?
    • good
    • 0
この回答へのお礼

説明不足ですいません。

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

お礼日時:2008/09/04 18:48

> (但しこの方法だとCGIプログラムがユーザに見えてしまうので


> cgi-binディレクトリ配下にCGIプログラムを置いて実行させたいと
> 思ってます。)

これの意味が分からないのですが、もしかしてインデックスファイルを
置いていない時にディレクトリ一覧が表示されるということでしょうか。
そういう場合は、空のindex.htmlを置いたり、ディレクトリ一覧の
表示を無効にしたりすることで回避できます。
cgi-bin以外でも動作するように設定されているなら上記の方法で
いいのではないかと思います。

現在ではcgi-binを使用する方法はあまり主流でないようです。
どこで実行しようともセキュリティ的にはあまり違いないですし、
設定的にもややこしくなりますしね。
CGIだけまとめるという点では利点がありますけど。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。

CGIプログラムがユーザに見えてしまうというのは回答の通りディレクトリ一覧が表示されています。
但しこれは意図して表示させています。
(お客の要求で表示させるという仕様になっているので・・・)
IndexIgnoreを使用してCGIプログラムを表示させないことはできるのですがCGIプログラムを1箇所にまとめておきたかったのでcgi-binを使用していました。

まだCGI関連の勉強を始めて間がないのでcgi-binを使用する方法が
主流でなくなっていることは知りませんでした。
CGIプログラムの格納方法についてはもう少し検討してみます。

また他に何か手がかり等ありましたらよろしくお願いします。

お礼日時:2008/09/04 15:41

サーバなどによってはSSIではCGIが動作しないこともあるようです。


この辺りの詳細はよく知らないのですが。

あと、例えばドメインが同じであっても内部で別のサーバと
関連付けていて cgi-bin ディレクトリが別のコンピュータに
ある場合などは動作させることができないと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

試しにCGIをindex.shtmlの1つ上の階層に置いて、そのCGIを指定した場合は動作したのでSSIからのCGI起動は動作しているようです。
(但しこの方法だとCGIプログラムがユーザに見えてしまうのでcgi-binディレクトリ配下にCGIプログラムを置いて実行させたいと思ってます。)

またcgi-binディレクトリはScriptAliasで設定はされていますが同一サーバ内のディレクトリです。

また他に何か手がかり等ありましたらよろしくお願いします。

お礼日時:2008/09/04 10:10

cgi="/cgi-bin/test.cgi"



cgi="./cgi-bin/test.cgi"
相対パスにして試してみてはどうでしょうか。

相対パスで動いたとすれば絶対パスがまずいのだと思いますが、
サーバの設定のどの辺をいじれば絶対パスで動くのかはわかりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2008/09/04 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!