- ベストアンサー
フォームからCGIを起動できない
こんばんは。 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------------------
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ブラウザ・サーバーでのやりとりでのパスの話になるので、実際には/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" でいいのです。
その他の回答 (3)
- level30
- ベストアンサー率62% (86/138)
>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ディレクトリは、ドキュメントルート 配下ではありませんよね? 逆にドキュメントルート配下に置いているのであれば、上記に書いてい るようなディレクトリに移動した方が良いと思います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
><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/
- level30
- ベストアンサー率62% (86/138)
><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/
お礼
そう考えるとごく当然のことに見えますが、ディレクトリを基準に考えると違和感が生じます。 あくまでブラウザでの指定が肝心ということですね。 ありがとうございました。