Top過去ログ目次掲示板

作成日:2003年09月07日 作成:おやじ
掲示板で過去に質問された内容です。

No.1547 CGIがフルパスで指定しないと動作しません


No.1547 投稿時間:2003年09月07日(Sun) 23:14 投稿者名:中ちゃん URL:
タイトル:CGIがフルパスで指定しないと動作しません

皆さん、初めまして。中ちゃんというおじさんです。
初めて掲示板を利用させていただきます。
RedHat9で自宅サーバを始めようと思っていますが、いろいろとハードルがあってつまづきながら手探りの状況です。LINUXは初心者同様ですので、どなたかご存知の方がおられましたらよろしくお願いします。

状況は、ユーザディレクトリでCGIを動作させる場合、CGIファイル内でLOGファイルやGIFファイルのパスを以下のようにフルパスで表記しないと動作しません。
-------------------------------------------------------
# ログファイル
$logfile = '/home/mond/public_html/cgi-bin/ecount.dat';
# 画像ディレクトリ(最後は / で終わること)
# → フルパスだと / から始まるパス(http://からではない)
$imgdir = '/home/mond/public_html/cgi-bin/gif/';
-------------------------------------------------------

インストールは「RedHat Linux9で作る自宅サーバー」(ラトルズ)という本と付属のCD-ROMでやりました。(この本にはユーザのCGI利用については触れていません)

WEBサーバ関係で設定したファイルは、httpd.conf と perl.conf ですが、perl.conf の内容は以下のとおりです。
-------------------------------------------------------
#
# Mod_perl incorporates a Perl interpreter into the Apache web server,
# so that the Apache web server can directly execute Perl code.
# Mod_perl links the Perl runtime library into the Apache web server
# and provides an object-oriented Perl interface for Apache's C
# language API. The end result is a quicker CGI script turnaround
# process, since no external Perl interpreter has to be started.
#

LoadModule perl_module modules/mod_perl.so

# This will allow execution of mod_perl to compile your scripts to
# subroutines which it will execute directly, avoiding the costly
# compile process for most requests.
#
#Alias /perl /var/www/perl
#<Directory /var/www/perl>
# SetHandler perl-script
# PerlHandler ModPerl::Registry::handler
# PerlOptions +ParseHeaders
# Options +ExecCGI
Alias /cgi-bin /var/www/cgi-bin
<Directory /var/www/cgi-bin>
SetHandler perl-script
PerlHandler ModPerl::Registry::handler
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>

Alias /cgi-bin /home/*/public_html/cgi-bin
<Directory /home/*/public_html/cgi-bin>
SetHandler perl-script
PerlHandler ModPerl::Registry::handler
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>

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

httpd.conf については、大きなファイルなので、お手数ですがどの部分を引用すればいいのか教えていただけないでしょうか。


No.1549 投稿時間:2003年09月08日(Mon) 00:45 投稿者名:U-mex URL:
タイトル:相対パス表記で普通はできるはずなんですけど。

> 状況は、ユーザディレクトリでCGIを動作させる場合、CGIファイル内でLOGファイルやGIFファイルのパスを以下のようにフルパスで表記しないと動作しません。
> -------------------------------------------------------
> # ログファイル
> $logfile = '/home/mond/public_html/cgi-bin/ecount.dat';
> # 画像ディレクトリ(最後は / で終わること)
> # → フルパスだと / から始まるパス(http://からではない)
> $imgdir = '/home/mond/public_html/cgi-bin/gif/';
> -------------------------------------------------------

Apache Version2は詳しく知らないので他の方に譲りますが、httpd.conf等
の設定を終えていて正常動作している場合での事とします。
そのcgiプログラムに依存するのですが、一般的にcgiプログラムが置いてある
ディレクトリからの相対パス表記で普通はできるはずなんですけどね。
ちなみに上記のフルパス指定は絶対パス表記です。
-------------------------------------------------------
# ログファイル
$logfile = './ecount.dat';
# 画像ディレクトリ(最後は / で終わること)
$imgdir = './gif/';
-------------------------------------------------------
この方法でもダメなら他の要因だと思われます。


No.1551 投稿時間:2003年09月08日(Mon) 11:04 投稿者名:中ちゃん URL:
タイトル:Re: 相対パス表記で普通はできるはずなんですけど。

U-mexさん、ありがとうございます。

> Apache Version2は詳しく知らないので他の方に譲りますが、httpd.conf等
> の設定を終えていて正常動作している場合での事とします。
> そのcgiプログラムに依存するのですが、一般的にcgiプログラムが置いてある
> ディレクトリからの相対パス表記で普通はできるはずなんですけどね。
> ちなみに上記のフルパス指定は絶対パス表記です。
> -------------------------------------------------------
> # ログファイル
> $logfile = './ecount.dat';
> # 画像ディレクトリ(最後は / で終わること)
> $imgdir = './gif/';
> -------------------------------------------------------
> この方法でもダメなら他の要因だと思われます。

元々はU-mexさんが書いておられるように、相対パスで動くはずなんですが、動かないのでいろいろとやってるうちに絶対パスで書いたら動いた・・・ということなんです。


No.1552 投稿時間:2003年09月08日(Mon) 12:02 投稿者名:U-mex URL:
タイトル:おやじ殿の「apacheの設定」を参照でしょうか。

> 元々はU-mexさんが書いておられるように、相対パスで動くはずなんですが、動かないのでいろいろとやってるうちに絶対パスで書いたら動いた・・・ということなんです。

…となるとhttpd.conf辺りかと思われますので、おやじ殿の「apacheの設定」を参照
でしょうか。perl.confは修正する必要無いかと思います。
前にも言ったように、apache2は動かしたことが無いので他の方に譲りたいと思います。

ユーザディレクトリの指定にコメントがあるのでは?
---- httpd.conf ----
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
---- End ----


No.1554 投稿時間:2003年09月08日(Mon) 21:22 投稿者名:おやじ URL:http://www.aconus.com/~oyaji/
タイトル:Aliasの二重指定はおかしいです。

こんばんは。

おやじはソースから入れているので基本的な設定が違いますが、直接今回の問題に繋がるかは分かりませんが、決定的な誤りが1点あります。

> Alias /cgi-bin /var/www/cgi-bin
>
> (snip)
>
> Alias /cgi-bin /home/*/public_html/cgi-bin

と、「/cgi-bin」のAliasが二つありますよね。これではApacheは気が狂ってしまいます。「Alias」とは「別名」のことで、

 Alias /cgi-bin /var/www/cgi-bin

とすると、/cgi-binは/var/www/cgi-binの別名、即ち、URIで/cgi-binとあったら、/var/www/cgi-binのことと解釈しろと宣言しているので、Alias指定で同じ/cgi-binが異なるパスに指定されることはありえません。後者のAlias指定を追加したのでしょうが、対策としては、デフォルトの前者のAlias指定をコメントアウトするか、下記のように/cgiだけにして、コンテンツの方のディレクトリもcgiにすれば解決しませんか?
 デフォルトをコメントアウトするほうが、簡単でしょうが、少し気になるのがAlias指定で、ウィルドカードが使えるかです。他にも、おやじがやっているようにユーザディレクトリでCGIを動作させる設定方法はありますが、この方法で理解されているようなので、駄目だったら再度おやじのコンテンツやFAQも参考にしてみてください。

Alias /cgi /home/*/public_html/cgi
<Directory /home/*/public_html/cgi>
SetHandler perl-script
PerlHandler ModPerl::Registry::handler
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>



掲示板▲頁先頭