[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:40855] Re: CGIは絶対ディレクトリ指定でないと、動かない?



杉浦です。
遅くなりましたが。

>>> In Message "[debian-users:40836] Re: CGIは絶対ディレクトリ指定でないと、動かない?"
>>>            <NEBBLIBDOLEAJJBKAFDDIECNEBAA.kikuchic@xxxxxxxxxxxxxxxxx>,
>>> "T.Kikuchi" <kikuchic@xxxxxxxxxxxxxxxxx>  said;
> > ScriptAlias は今回関係ありません。
> > Directory /usr/lib/cgi-bin/ に関する指定は関係ありません。
> > Options の ExecCGI も関係ありません。
> >
> > もう一度になりますが、「SSI を使ったコマンド実行」と 「CGI」 の
> > 区別をしましょう。基本的にそれで解決します。

> ・・・何となく、わかってきました。
> 通常では、/usr/lib/cgi-bin/内においた物は、<!--#exec cmd=""-->で、
> 絶対指定でしか動かせない。

いえ。動きます。ただ今回は、その "相対的に有る場所" の指定が間違って
いるだけです。

> プログラム内で、指定されたファイルなどは、ScriptAliasの指定で、
> 絶対指定しなくても良い、と言うことなのでしょうか。

いえ。そんなことはありません。実行されたプログラム内まで ScriptAlias は
効果が付いてきません。あくまで apache (のCGI呼び出し)を経由した場合だけです。



ちょっと細かく説明する余裕がないのでざっくり書くと、
「CGI」 というのは、apache が要求されたに URI に対応するファイルを
DocumentRoot や Alias, RewriteRule, VirtualHost なんかの指定を
解釈して見つけ、それをそのまま返す代わりに、そのファイルを実行した
出力をクライアントに返します。この出力は HTTP ヘッダを含んでいる
必要があります。
「SSI経由のコマンド実行」と言うのは、同じようにファイルを見つけた後、
その中に書いてある SSI コマンド(<!--#exec cmd="****"-->) の ***
の部分を、普通にログインして shell から実行したのと同じように(ただし
apache の権限で)実行します。そして、その出力で SSI コマンドの部分を
置き換えた結果をクライアントに返します。
どちらもそのファイルのあるディレクトリがカレントディレクトリになります。

-- 
Tatsuki Sugiura   mailto:sugi@xxxxxxxxxxxxxxxxxxxxxxxxxxx