CGI-BBS > 基本認証 > 仕組み > 「CGIでパスワード制限」で、入力フォームが表示されません


カレッヂ
カレッヂ


質問者 たまご  投稿日 7/12(木) 14:07:50
メインのホームページから設定するリンク先は”enter.cgi”でいいんですよね?

それで試してみると、入力フォームのページが表示されず、いきなり
「401 あなたのパスワードは認証されませんでした」となってしまうのです。

いったいどこがいけないのでしょうか?
回答者 呑兵衛  [削除]  投稿日 7/12(木) 20:35:15
呑兵衛といいます。

アクセスを制限する
aaa.html、bbb.html、ccc.htmlへのリンクが表示され、
かつIDとパスワード入力欄の表示のある
(rescueさんのデフォルトのものではindex.html)
ddd.htmlがリンク先でないといけません。

enter.cgiは入力されたIDとパスワードの評価をするスクリプトファイルです。
これを直接呼び出せば、待っている値(ID,Password)がnull(つまり空白)で渡されたことに
なり、記録されている正しいIDやPasswordではないため、エラーになるのです。

質問者 たまご  [削除]  投稿日 7/13(金) 09:46:03
呑兵衛さんありがとうございます。

と、すると、私はデフォルトの指定どおりにつくっていますのでindex.htmlですね。
・・・と思ってやってみたのですが、今度はサーバーの実行エラーになってしまいました。
メッセージは以下のとおりです。

/ucgiu2/ucgiroot/B00377/cgi-bin/public_html/index.html not world executable

原因がおわかりになりますでしょうか。
回答者 呑兵衛  [削除]  投稿日 7/13(金) 12:33:36
> /ucgiu2/ucgiroot/B00377/cgi-bin/public_html/index.html not world executable

このエラー表示を拝見する限り、cgi-bin ディレクトリ以下に .htmlファイルが置かれているようですね。
サーバーによっては cgi-bin ディレクトリ以下には .htaccess などで mime定義をしないと
(しても).htmlファイルなどを正常に処理しないものがあります。

/ucgiu2/ucgiroot/B00377/ が通常のホームページポジション(通常のpublic_htmlと呼ばれ
る場所のディレクトリ)なのでしょうか?
つまり、誰もが最初にアクセスする index.html のある場所か?ということです。
もしそうなら、アクセス制限ページを記載した .html ファイルを名前を変えてそこに転送し、
enter.cgi や cgi ファイルへのパスも変更して試してみてください。

とりあえず動かすために具体的には
enter.cgi の
$private_html = '../../private_html';

$private_html = '../B00377';
にかえ
プロバイダーが用意している cgi-bin ディレクトリに置きます。
次に
制限ファイルを記載したxxx.html の
<form action="enter.cgi" method=post>

<form action="./cgi-bin/enter.cgi" method=POST>
に変更します。
xxx.html、401.html、404.html は ホームページポジションディレクトリ(B00377)に置き
ます。これでお試しください。

余計ですが、cgi-bin ディレクトリの中に public_html という名のディレクトリを作ると
他の cgi スクリプトを移植する時の説明で混乱が生じる可能性がありますので、
別名にされた方がよろしいでしょう。
public_htmlディレクトリは、通常wwwで最初に呼び出されるファイルが置かれる
(誰にでもアクセスできる)場所、という暗黙めいた了解があるようです。
質問者 たまご  [削除]  投稿日 7/13(金) 15:04:50
呑兵衛さん、早々とご返事ありがとうございます。

とりあえずお礼だけ先に言っておこうと思いまして。
これからちょっとトライしてみようと思います。

プロバイダーからあてがわれているCGIスペースは、通常のhtmlファイルの置いてあるサーバーと場所が違うんです。それで、私がアクセスしていじれるのはcgi-bin以下で、それ以上上のパスのことは今まで意識したことがありませんでした。呑兵衛さんのおっしゃるホームポジションはこの場合cgi-binということになりますでしょうか。

今回はデフォルトの説明どおりと思ってpblic_htmlフォルダを作り、フォームの名前もindex.htmlとしました。

この位置でいけないのはhtmlファイルを置くことなのかそれともindexだからなのか・・・
うーんちょっと混乱してきましたが。

ともあれ呑兵衛さんの記述を参考にディレクトリを変更してみます。
質問者 たまご  [削除]  投稿日 7/13(金) 16:51:52
やってみました。

なるべく簡素にしたいと思い、index.htmlをform.htmにして本来の(CGIじゃないほうの)
ホームページディレクトリにもってきました。
それからenter.cgiへのパスを書き換えて。
それでなんとか表示できました!

でも問題もあって、認証OKの時に表示されるファイルが必ずpribate_htmlにないと
表示されないんです。なんとか本来のホームページのほうのディレクトリを絶対パス指定
して表示させたいと思ったんですが、なぜかだめでした。
$private_html='http://www....   ':
ってやってフォルダを指定してみたんですがこれでもだめなようでした。
なのでしょうがなく移動させて表示するようにしました。

認証後の移動先を指定しているのは入力フォームのoption valueなのでしょうか
enter.cgiなのでしょうか?

ページはみれたものの今度はいっしょに持ってきた画像ファイルが出ないのです。
ためしに画像については絶対パスを指定して参照するようにしたらOKでした。
おんなじフォルダに置いたのにこっちはだめなんて・・・gifのパーミッションとか
そういう問題なのでしょうか。

回答者 呑兵衛  [削除]  投稿日 7/13(金) 20:23:28
あなたがサーバースペースを借りているプロバイダーの
各種ファイルの設定を説明したページがあると思います。
まずそちらから熟読してください。

> 認証OKの時に表示されるファイルが必ずpribate_htmlにないと表示されないんです。

> ページはみれたものの今度はいっしょに持ってきた画像ファイルが出ないのです。
は、
あなたのスクリプトが正常に働いたあと form.htmに記述された通りの場所を探した
「結果」の表示です。
ですので、「認証されたときは」「どこにあるファイルを参照する」
という仕組を書いてやる必要がある、ということですね。

返信(回答)する


Web裏技