• ベストアンサー

HTMLからのpl実行

htmlのタグに下記のように記述し(test.html) <FORM METHOD="POST" ACTION="http://192.168.100.100:8080/cgi-bin/test.pl"> cgi-binにあるtest.plを実行したいのですが、 test.plのコードの中身がブラウザに表示されてしまいます。 httpd.confの設定は下記のように設定してあり、 権限もtest.pl,test.htmlともに755で設定しています。 ** ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory "/usr/local/apache/cgi-bin/"> AllowOverride None Options None Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi .pl .rb

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

その後どうなったのか判りませんが 今日少し時間がありましたので apache1.3.41をコンパイルしてみました(2.0や2.2と違ってコンパイルがすぐ終わるね) /usr/local/uie/apache-root/cgi-bin/ ディレクトリを作って #5の下に書いたスクリプトを env.txtとして保存 さらに同じ内容で拡張子無しの 0 というfile名でも保存して chmod 705 * /usr/local/apache/conf/httpd.conf に ScriptAlias /cgi-bin/ "/usr/local/uie/apache-root/cgi-bin/" <Directory "/usr/local/uie/apache-root/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all #AddHandler text/plain .cgi .pl .txt   ##↑の行頭の#を取るとCGIではなくプレーンテキストとして扱われます。 </Directory> port:8134 #↑80から8134に変更 と記述してから /usr/local/apache/bin/apachectl start http://ホスト名:8134/cgi-bin/env.txt http://ホスト名:8134/cgi-bin/0  ともに問題なく CGIとして動きます。 次に 上記 #AddHandler 行頭の # を取ってから /usr/local/apache/bin/apachectl restart すると http://ホスト名:8134/cgi-bin/0  はCGIとして動作しますが http://ホスト名:8134/cgi-bin/env.txt  はプレーンテキストとしてソースが表示されます  (↑FireFOXの場合 MSIEだと文内にHTMLタグが有るのでtext/plainでサーバーから送られてもHTMLとして表示してしまいます) ###まとめとして 1.ScriptAlias内ではデフォルトで全てのfileを拡張子とは無関係にCGIとして扱われる 2.逆にScriptAlias内でCGI以外として扱ってほしい場合は AddHandler で指定する あと、もしも/usr/local/apache/conf/httpd.confをいじりすぎて訳が判らなくなったら mv httpd.conf test-httpd.conf などと名前を変えてから /usr/local/apache/conf/httpd.conf.default をhttpd.confとしてコピーすれば 初期状態に戻ります(apache2系なら conf/の下の original/httpd.conf)

nana_poco
質問者

お礼

ありがとうございます。 そのご試行錯誤してソースの改行コードがCR+LFだったため 修正したところ、うまく動くようになりました。 大変初歩的なミスですみません。

その他の回答 (5)

回答No.5

ScriptAliasが有効な場合 OptionsもAllowOverrideもNoneのままで AddHandlerの設定も不要です  つまり<Directory "/usr/local/apache/cgi-bin/"> に関しては  質問文のままでCGIが動きます ScriptAliasで設定されたディレクトリ内は  初期状態のままで 全てのFile(拡張子の有無に関わらず)がCGIと見なされます  ですから 普通の.txtや 画像Fileを置いて、ブラウザでアクセスしようとしても  ApacheはCGIとして実行させようとしますので 必ず500errorに成ります。 ですから 質問者さんの場合に考えられるのは 1.ScriptAliasが無効になっている    ScriptAliasではなく普通のAliasで指定されている    これだと当然初期状態のままでは cgiは動きませんので    <Directory コンテナで OptionsとAddHandler を指定するか     AllowOverrideで.htaccessを有効にして そちらでOptionsとAddHandler を指定しないとCGIとして動きませんが ただ不思議なのは 少なくともほとんどのLinuxなら ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" はApache1.3系を自分でコンパイルして入れた場合の初期設定のまま (Apache2系だと ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/") ですので わざわざScriptAlias をAliasと書き換えない限り CGIが無効になる筈は無いのですが? 2.実は実行されているが CGIで text/plain を吐いているため   MSIEでおかしな処理をする  これは、昔はときどきApacheのMLでも質問されてましたが  MSIEが変な仕様のためにtext/plainをうまく処理できません  text/html を使ってHTML文を出力した方がいいです。 ####オマケ付き(笑) 以下のスクリプトを ### /usr/local/apache/cgi-bin/env.txt (.cgiや .plでなく .txtです)という名前で設置し ### ブラウザでアクセスしてみてください ### ScriptAliasが有効であれば 環境変数一覧が表示されます #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print<<HTML_HEAD; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <TITLE>ENV TEST</TITLE> </HEAD> <body> <H2>ENV TEST</H2> <hr> HTML_HEAD foreach (sort(keys(%ENV))){print "$_ = $ENV{$_}<P>\n";}

回答No.4

もう一個ありました。 AllowOverride None Overrideを全て拒否してますので、それ以下の全ての指定が無効になってますね。 この行を消してみてください。 1回で全部見つけられずすみません。

回答No.3

> <Directory "/usr/local/uie/apache-root/cgi-bin/"> 最初の質問の指定と違ってますが? 違うディレクトリを指定しても意味がないと思いますけど。

nana_poco
質問者

補足

すみません、いままでは公の場ということもあり フォーマルなものに書き換えていましたが 先ほどのはそのままコピーしてしまいました。 設定は同じディレクトリを指しています。

回答No.2

AddHandler cgi-script .cgi .pl .rb この記述ですが、<Directory>の外側に書いてありますか? それだと.htaccessのあるディレクトリに適用されて、/usr/local/apache/cgi-bin/の中にある.cgi、.pl、.rbファイルには適用されませんので、 <Directory>の中に書く様にしてみてはいかがでしょうか。 それから Options ExecCGI ではなく Options +ExecCGI にしておく方がいいと思います。

nana_poco
質問者

補足

ありがとうございます。 このように設定して再起動してみましたが ソースコード表示のままでした。 <Directory "/usr/local/uie/apache-root/cgi-bin/"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all AddHandler cgi-script .cgi .pl .rb </Directory>

  • _himajin_
  • ベストアンサー率65% (128/195)
回答No.1

Options None が原因ではないでしょうか。 Options +ExecCGI としてみてください。

参考URL:
http://httpd.apache.org/docs/2.0/ja/howto/cgi.html
nana_poco
質問者

補足

ありがとうございます。 <Directory "/usr/local/apache/cgi-bin/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> 設定を変更してみましたが、結果は変わりませんでした。 ソースコード表示のままです。

関連するQ&A