- ベストアンサー
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
- みんなの回答 (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)
その他の回答 (5)
- umasikajiro
- ベストアンサー率67% (545/803)
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";}
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
もう一個ありました。 AllowOverride None Overrideを全て拒否してますので、それ以下の全ての指定が無効になってますね。 この行を消してみてください。 1回で全部見つけられずすみません。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> <Directory "/usr/local/uie/apache-root/cgi-bin/"> 最初の質問の指定と違ってますが? 違うディレクトリを指定しても意味がないと思いますけど。
補足
すみません、いままでは公の場ということもあり フォーマルなものに書き換えていましたが 先ほどのはそのままコピーしてしまいました。 設定は同じディレクトリを指しています。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
AddHandler cgi-script .cgi .pl .rb この記述ですが、<Directory>の外側に書いてありますか? それだと.htaccessのあるディレクトリに適用されて、/usr/local/apache/cgi-bin/の中にある.cgi、.pl、.rbファイルには適用されませんので、 <Directory>の中に書く様にしてみてはいかがでしょうか。 それから Options ExecCGI ではなく Options +ExecCGI にしておく方がいいと思います。
補足
ありがとうございます。 このように設定して再起動してみましたが ソースコード表示のままでした。 <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)
Options None が原因ではないでしょうか。 Options +ExecCGI としてみてください。
補足
ありがとうございます。 <Directory "/usr/local/apache/cgi-bin/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> 設定を変更してみましたが、結果は変わりませんでした。 ソースコード表示のままです。
お礼
ありがとうございます。 そのご試行錯誤してソースの改行コードがCR+LFだったため 修正したところ、うまく動くようになりました。 大変初歩的なミスですみません。