17

apacheおよびを使用して構成している間、 /が実行されずにプレーンテキストとして表示されるperl cgi scripts理由がわかりません。ブラウザに入れると、実行するのではなく、以下のコードが表示されます。index.cgiindex.plhttp://localhost

List item
    #!C:/Dwimperl/perl/bin/perl.exe -w

     print "Content-type: text/html\n\n";
        print <<HTML;
        <html>
        <head>
        <title>A perl web page</title>
        </head>
        <body>
        <h3>A hello world form perl</h3>
        </body>

        HTML
        exit;

これはhttpd.conf私がほとんどの場合編集したファイルの一部です(さまざまなオンラインリファレンス、チュートリアルを読んだ後)

# This should be changed to whatever you set DocumentRoot to.
<Directory "D:\webserver">

Listen 80
ServerName localhost:80
LoadModule cgi_module modules/mod_cgi.so

# First, we configure the "default" to be a very restrictive set of 
# features.  
<Directory />
    Options FollowSymLinks +ExecCGI
    AllowOverride None
</Directory>

DirectoryIndex index.html index.html.var index.cgi index.pl

AccessFileName .htaccess

# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi .pl

ScriptAlias /cgi-bin/ "C:/Apache/Apache2/cgi-bin/"
4

7 に答える 7

31

ブラウザがスクリプトのコードを印刷している場合、スクリプトを実行するアプリケーションが見つからないことを意味します。以下の2行は、これを解決するための最初のステップです。AddHandlerは、ファイルがcgiスクリプトで終わり、cgiスクリプトとして扱われることを確認し.cgiます.pl。そして、+ExecCGIオプションはスクリプトを実行することを可能にします。また、スクリプトが正しいperlバイナリの場所を指していることを確認してください。

    AddHandler cgi-script .cgi .pl
    Options FollowSymLinks +ExecCGI

また、httpd.confにいくつかの間違い/設定ミスがあります

  • エイリアス行は、cgiスクリプトが存在するcgi-binディレクトリを指している必要があります。

ScriptAlias / cgi-bin / "D:\ webserver \ cgi-bin"

  • 同じcgi-binディレクトリの場合、次の設定がにある必要がありますhttpd.conf<Directory "D:\webserver">パーツを以下に交換する必要があります。
<Directory "D:\webserver\cgi-bin" />
    AddHandler cgi-script .cgi .pl
    Options FollowSymLinks +ExecCGI
    AllowOverride None  
</Directory>
  • 以下のようなコマンドラインからcgiスクリプトを実行してみてください。最初にコマンドラインから印刷または実行する必要があります。

perl test.cgi

  • cgi-binディレクトリとcgiスクリプトに対する読み取り/書き込み再帰権限があることを確認してください。また、書き込み権限を持つディレクトリまたはファイルを作成することもできます。そうでない場合は、書き込み権限を持ち、代わりにパスと属性cgi-binを指定できる他の場所にディレクトリを作成します。aliasdirectoryhttpd.conf
  • apache confの問題が発生するたびに、apacheエラーログで正確なエラーメッセージを確認してください。それはあなたに問題への良い洞察を与えるでしょう。

また、このリンクはあなたを助けるはずです。

元の回答者によるものではなく、追加のコメント:モジュールを有効にする必要がある場合もありcgiます。私にとって、cgiをApache 2の新規インストールで動作させるための最後のステップはでしたsudo a2enmod cgi。それを行う前に、Webサイトは単にスクリプトの内容。)

sudo a2enmod cgi

于 2013-02-10T09:14:19.693 に答える
2

ディレクトリ/場所/ファイルに適切なハンドラーが関連付けられていないか、ExecCGIオプションが有効になっていません。Apacheチュートリアル:CGIを使用した動的コンテンツを参照してください。

于 2013-02-10T00:11:26.910 に答える
2

Apacheの新しいバージョンを変更する:Options + FollowSymLinks + ExecCGI

于 2014-02-13T13:17:32.977 に答える
1

Mac OSX10.8の場合

私はこれをしなければなりませんでした

<Directory />
    Options FollowSymLinks +ExecCGI
    AllowOverride None
</Directory>

これのコメントを外す

#AddHandler cgi-script .cgi .pl
于 2013-10-12T07:25:06.863 に答える
1
 # use types www.site.com/visible-in-url
 # Apache serves /var/path/to/dir
 ScriptAlias /visible-in-url/ /var/path/to/dir/

 # Note the order of the aliases matters - first cgi than static content
 # Note this dir is a symlink pointing to the desirable directory
 <Directory "/var/path/to/dir">
    AddHandler cgi-script .cgi .pl
    AllowOverride Indexes
    Options +ExecCGI +MultiViews +SymLinksIfOwnerMatch
    Require all granted
 </Directory>

 <Files ~ "\.(pl|cgi)$">
    SetHandler perl-script
    PerlResponseHandler ModPerl::PerlRun
    Options +ExecCGI +SymLinksIfOwnerMatch
    PerlSendHeader On
 </Files>
于 2014-08-21T19:05:18.073 に答える
1

ブラウザがスクリプトのコードを印刷している場合、スクリプトを実行するアプリケーションが見つからないことを意味します。

(OSX Yosemite、 10.10.5Apache 2.4の場合)、間違ったパスでシバンラインを使用すると、ブラウザに次のように表示されます。

内部サーバーエラー

しかし、有効なシバン行があっても、受け入れられた回答のアドバイスに従ってcgiプログラムを実行することはできませんでした。Apacheはプログラムのテキストをブラウザに提供しただけです。/usr/local/apache2/conf/httpd.confいくつかの実験の結果、ファイルに加える必要のある変更は、次の行のコメントを外すことだけであることがわかりました。

LoadModule cgid_module modules/mod_cgid.so

私のcgiプログラムには、プログラミングしている言語に応じて拡張子.pl、.py、および.rbがあり(apache cgi-binディレクトリには拡張子のないテストcgiスクリプトが含まれています)、すべてを指定しなくても実行できます。 httpd.confファイルの任意の場所で有効な拡張子。私のデフォルトhttpd.confファイルには、次の関連する行しかありません。

<IfModule alias_module>
    #Lots of comments here

    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

</IfModule>
...
...
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

私が使用しているシバンラインは、私のcgiプログラムがどの言語で書かれているかによって異なります。

#!/usr/bin/env perl

また:

#!/usr/bin/env python 

また:

#!/usr/bin/env ruby

cgiプログラムも実行可能ファイルである必要があります。そうでない場合、内部サーバーエラーが発生します。

$ chmod a+x myprog.pl

a+x=>すべて+実行可能ファイル。つまり、所有者、グループ、その他のそれぞれに実行可能アクセス許可を追加します。

そして、少なくともcgiプログラムはContent-Type header、応答の本文を出力する前にaを生成する必要があります。

print "Content-Type: text/html\n\n";
print "<h1>Hello, World.</h1>";

(ちなみに、その正確なコードはperl、python、またはrubyで機能します。)そうでない場合は、もう一度内部サーバーエラーが発生します。

cgiスクリプトを実行するためのURL:

http://localhost:8080/cgi-bin/myprog.pl

これが私がapacheをインストールした方法です:

~/Downloads$ tar xvfz httpd-2.4.18.tar.bz2
...
...
~/Downloads$ cd httpd-2.4.18
...
...
~/Downloads/httpd-2.4.18$ ./configure --help
...
...
--enable-so       DSO capability. This module will be automatically
                  enabled unless you build all modules statically.
...
...

一体何を意味するのかわかりませんでしたが、phpのドキュメントには、そのオプションを使用してApacheをインストールするように指示されているため、先に進んでこれを実行しました。

~/Downloads/httpd-2.4.18$ ./configure --enable-so
...
...
~/Downloads/httpd-2.4.18$ make
...
...
~/Downloads/httpd-2.4.18$ sudo make install

ApacheDSOのドキュメントはこちら

于 2016-04-16T01:25:53.883 に答える
0

他に何も機能しない場合は、ローカルサーバーから実行可能スクリプトを呼び出すHTMLページを表示していることを確認してください(例: http: //192.168.0.15/yourPage.html ) 。ブラウザでHTMLページをファイルとして開いて呼び出すと、実行可能スクリプトが常にファイルとして表示されます。

于 2020-08-08T17:38:34.613 に答える