プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。
WebサーバApacheでCGIを作成しています。
DocumentRootが初期設定/var/www/html/で、その下にindex.htmlを作成しました。
次にcgiのディレクトリが初期設定の/var/www/cgi-bin/で、その下にtest.cgiを作成しました。
そして、test.cgiのパーミッションを-rwxr-xr-xにしてからApacheを起動しました。

別マシンのブラウザからhttp://xxx.xxx.xxx.xxx/index.htmlでアクセスし、フォームのテキストボックスに「abc」と入力して送信ボタンを押しましたが、404エラーになってしまいます。
(アドレスバーには「http://xxx.xxx.xxx.xxx/test.cgi?NAME=abc」と表示)

ブラウザのアドレスバーに直接「http://xxx.xxx.xxx.xxx/cgi-bin/test.cgi?NAME=abc」とすると正常にアクセスできます。

ドキュメントルート配下にあるindex.htmlからドキュメントルート外にあるCGIのディレクトリ(ScriptAlias /cgi/bin/ "/var/www/cgi-bin/")を参照するにはどのようにしたらよいのでしょうか?

----------index.html----------------
<HTML>
<HEAD><TITLE>フォーム</TITLE></HEAD>
<BODY>
<FORM ACTION="../cgi-bin/test.cgi" METHOD="GET">名前
<INPUT TYPE="TEXT" NAME="NAME"><BR>
<INPUT TYPE="SUBMIT" VALUE="送信">
</FORM>
</BODY>
</HTML>
----------index.html----------------

----------test.cgi------------------
#!/usr/bin/perl
$str = $ENV{"QUERY_STRING"};

print << "EOF";
Content-type: text/html
<HTML>
<HEAD><TITLE>TESTCGI</TITLE></HEAD>
<BODY>$str</BODY>
</HTML>
EOF
----------test.cgi------------------

A 回答 (4件)

>

http://xxx.xxx.xxx.xxx/cgi-bin/test.cgiなので、ドキュメントル
>ート配下のcgi-binとなってしまい、/var/www/html/cgi-bin/と解釈
>されるように思います。
>
>ドキュメントルート/var/www/html/
>CGIディレクトリ/var/www/cgi-bin/
書いてある内容を見ると、CGIディレクトリは、ドキュメントルート
配下ではありませんよね?

逆にドキュメントルート配下に置いているのであれば、上記に書いてい
るようなディレクトリに移動した方が良いと思います。
    • good
    • 0

ブラウザ・サーバーでのやりとりでのパスの話になるので、実際には/var/www/html/にファイルがあってもそれは関係ありません。



http://xxx.xxx.xxx.xxx/index.html
から見れば
http://xxx.xxx.xxx.xxx/cgi-bin/test.cgi
はindex.htmlが置いてあるのと同じルートにあるcgi-binの中なわけですから
ACTION="./cgi-bin/test.cgi"
でいいのです。
    • good
    • 0
この回答へのお礼

そう考えるとごく当然のことに見えますが、ディレクトリを基準に考えると違和感が生じます。
あくまでブラウザでの指定が肝心ということですね。
ありがとうございました。

お礼日時:2005/12/26 21:32

><FORM ACTION="../cgi-bin/test.cgi" METHOD="GET">名前


<FORM ACTION="./cgi-bin/test.cgi" METHOD="GET">名前
で良いのでは?

この回答への補足

解決しました。試したと思っていましたが勘違いだったようです。
ところでなぜそれで実現できるのでしょうか?
http://xxx.xxx.xxx.xxx/cgi-bin/test.cgiなので、ドキュメントルート配下のcgi-binとなってしまい、/var/www/html/cgi-bin/と解釈されるように思います。

ドキュメントルート/var/www/html/
CGIディレクトリ/var/www/cgi-bin/

補足日時:2005/12/24 03:26
    • good
    • 0

><FORM ACTION="../cgi-bin/test.cgi" METHOD="GET">名前


<FORM ACTION="/cgi-bin/test.cgi" METHOD="GET">名前
で良いのでは?

この回答への補足

解決しました。試したと思っていましたが勘違いだったようです。
ところでなぜそれで実現できるのでしょうか?
http://xxx.xxx.xxx.xxx/cgi-bin/test.cgiなので、ドキュメントルート配下のcgi-binとなってしまい、/var/www/html/cgi-bin/と解釈されるように思います。

ドキュメントルート/var/www/html/
CGIディレクトリ/var/www/cgi-bin/

補足日時:2005/12/24 03:22
    • good
    • 0

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