CGI専用ディレクトリがHTML用ディレクトリの外にある場合

motikoさん (2012-05-10 14:39:16) http://gomennasai

和田様

MailformPro、いつも大変重宝して使わせて頂いております。

以下、長文で大変失礼します。
なにぶん知識が浅いもので、状況お伝えできているか心配ですが、
よろしければご助力頂けると嬉しいです。

このたび、CGIのための専用ディレクトリがドキュメントフォルダ?と分かれ、
同列に置かれている、という設定のサーバに設置しようとしています。
下記のような構成です。

----------------------------------------
(CGI専用ディレクトリ)
MailformProのCGIファイルのみこちらへ
/○○○/cgi-bin/config.cgi
/○○○/cgi-bin/include.cgi
/○○○/cgi-bin/send.cgi
/○○○/cgi-bin/…

MailformProの上記以外のファイルはこちらへ
/○○○/htdocs/form/common/
/○○○/htdocs/form/commons/
/○○○/htdocs/form/img/
/○○○/htdocs/form/Jcode/
/○○○/htdocs/form/Jcode.pm
/○○○/htdocs/form/serial.dat
/○○○/htdocs/form/time.dat
/○○○/htdocs/form/…

MailformProを利用する、フォームを置いてあるhtmlページはこのような階層
/○○○/htdocs/abc/def/inquiry.html
/○○○/htdocs/abc/def/thanks.html

※CGIファイルをcgi-bin内に置いたので、CGI以外の各ファイル内のパス記述は、
 すべて修正しています。
 各ファイルの属性設定などもマニュアルどおり行っています。

----------------------------------------

フォームページ(inquiry.html)内で、
send.cgiとinclude.cgiを呼び出すところがあります。

----------
<form id="mailform" method="post" action="../../../cgi-bin2/send_i.cgi" onsubmit="return falsesubmit(this)">
<script type="text/javascript" src="../../../cgi-bin2/include_i.cgi" charset="UTF-8"></script>
----------

cgiを呼ぶとき、相対パスだとこのような記述になるのでしょうか?
このように書くと、ブラウザ(Firefox)上で確認した際、
Javascriptの確認画面が表示された後、送信を押すと
Thankyou画面に行かず「404 Not Found」となってしまい、
「send.cgiが見つからない」といったエラーが出ます。

----------
Not Found
The requested URL /cgi-bin/send.cgi was not found on this server.
----------

当然、入力者にも設置者にも自動メールも送信されてきません。
アドレスバー上でも
http://www.×××.jp/cgi-bin/send.cgi
となっているので、send.cgiが正常に呼べていないのだと思っています。
そもそも、inquiry.htmlを読んだ時点でinclude.cgiもNotFoundですね。

CGIファイルのパス指定の仕方に問題があるのかと思いますが、
どのように記述すればよいものでしょうか…?

標題のとおり「CGI専用ディレクトリがHTML用ディレクトリの外にある場合」として
いろいろ調べていますが、cgi-binの中にBasic認証?(.htaccessのこと?)を
置いて環境変数を変更…などとあったりしますが、よく理解できないでいます…

なおこのサーバへのアクセスは、現在のところ
専用環境(特定IP)でしかアクセスさせてもらえないようで、
URLをお伝えすることができません。申し訳ありません。

別の、CGI専用ディレクトリが無いサーバへの設置は行えています。
上記でなにかお分かりになることがありますでしょうか?
サポート掲示板もかなり探したつもりですが、ほしい回答が見つからず…
ヒントだけでも頂ければ…

なにとぞよろしくお願い致します。

Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

motikoさん (2012-05-10 14:49:12) http://


<form id="mailform" method="post" action="../../../cgi-bin2/send_i.cgi" onsubmit="return falsesubmit(this)">
<script type="text/javascript" src="../../../cgi-bin2/include_i.cgi" charset="UTF-8"></script>


<form id="mailform" method="post" action="../../../cgi-bin/send.cgi" onsubmit="return falsesubmit(this)">
<script type="text/javascript" src="../../../cgi-bin/include.cgi" charset="UTF-8"></script>

失礼しました…

Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

さるくんさん (2012-05-10 21:04:49) http://gomennasai

motikoさん こんばんは。

横やりで返信失礼します。

cgi-binがhtdocsの外にある場合、サーバ側で「script alias」という設定がされている場合がほとんどです。
この場合、cgi-binフォルダはhtdocsの中にあるかのようにアクセスすることができます。
ですので、このときのパスは "../../cgi-bin/~~" となります。

config.cgi側で設定するサンクスページへのパスも注意してください。

がんばってみてください!

Re:Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

motikoさん (2012-05-12 18:57:23) http://

さるくんさん

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

>サーバ側で「script alias」という設定
>htdocsの中にあるかのように

なるほど、そういうことがあるんですね…
わかりやすいご説明で助かります!
ということは、各フォルダの階層は、あたかも

/htdocs/cgi-bin/*.cgi
/htdocs/form/*
/htdocs/abc/def/*.html

というふうにあると思ってパスを書ける(書くべき)、ということですね。

<form id="mailform" method="post" action="../../cgi-bin/send.cgi" onsubmit="return falsesubmit(this)">
<script type="text/javascript" src="../../cgi-bin/include.cgi" charset="UTF-8"></script>

こうですね。やってみます!

試してみて、結果はまた近日中にレポートしたいと思います。
では!^^

Re:Re:Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

motikoさん (2012-05-14 15:52:59) http://

結果ですが…残念ながらNGでした。。

ブラウザ上で表示されるエラーメッセージは
../../../cgi-bin/send.cgi
../../cgi-bin/send.cgi
どちらの場合で書いても全く同じでした。

ところで、「postfix」を入れているようなのですが、
「postfix cgi」などでぐぐると、
「postfixを入れたらCGIが動かなくなった」
といった話もあるようですが
もしかして関係あったりするのでしょうか…

Re:Re:Re:Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

さるくんさん (2012-05-14 17:40:23) http://

motikoさん こんにちは

ダメでしたか、、、
エラーメッセージが同じという事は、Not Foundですので、パスが通っていないということで間違いないと思われます。多分。
Perlが動くところまで行っていないので、postfixを気にする段階でもないはずです。。。

cgi-binディレクトリの直下にsend.cgiを設置しているんですよね?
cgi-bin/mailformpro/send.cgiとかじゃないんですよね、、、?

あと、どこのレンタルサーバを利用しているのでしょうか??

とか、.htaccessファイルを設置したら、htdocs内でCGI動かせたりしませんか??動くなら、その方が早い気がしますし。

Re:Re:Re:Re:Re:CGI専用ディレクトリがHTML用ディレクトリの外にある場合

motikoさん (2012-05-16 18:12:28) http://

さるくんさん

ディレクトリ構成やファイル名は前述のとおりで間違いないです。
サーバは、よくあるレンタルサーバを利用しているのではなく、
あるビルの屋内に設置してある独自サーバ(?)です。

↓そんな折↓

パスは、当初の
../../../cgi-bin/send.cgi
で動くことが確認できました…!

その顛末はというと…

フォームのページは、これまでずっと
http://~/*.html
で開いていたのですが、
https://~/*.html
と、暗号化ページとして開き進めると、無事にThanksページまで到達できました。
(ユーザ宛て・管理者宛ての自動メールなど、一連が正常動作しました)

これって、Apacheのhttpd.conf(?)で設定するんですよね。
なので今は、「実はcgi-bin2にSSL暗号化の設定がされていた」と解釈しています。
このサーバでは、過去にCGIを動かしたことが無かったようなので、
「使っていないなら、セキュリティ保護してないだろう…」
と思ってしまっていました。
サーバ管理者の方、もっと早く情報くれてれば…という感じではありますが、
「こんなこともある」と、実経験がひとつ増えたので、よしとします。^^;

今回の件で、新しくいろいろ勉強できました。
さるくんさん、もろもろご検討頂き、本っ当っに!ありがとうございました!
上記のとおりのパス記述でOKでしたので、
「script alias」の例の設定はなかったみたいですね。。

今後もまた別のサーバ上でMailformを使わせて頂くことがあると思います。
トラブル発生の時には、またお助け頂ければ助かります!
では!!^0^)/