Apache
およびPerl cgi scripts
を使用して設定する場合、index.cgi
/index.pl
を実行する代わりにプレーンテキストとして表示される理由がわかりません。ブラウザにhttp://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/"
ブラウザがスクリプトのコードを印刷している場合、それはスクリプトを実行するアプリケーションを見つけることができないことを意味します。これを解決するための最初のステップは2行下です。 AddHandlerは、_.cgi
_および_.pl
_で終わるファイルがcgiスクリプトとして扱われるようにします。また、_+ExecCGI
_オプションを使用すると、スクリプトを実行できます。また、スクリプトが正しいPerlバイナリの場所を指していることを確認してください。
_AddHandler cgi-script .cgi .pl Options FollowSymLinks +ExecCGI
_
また、httpd.confにいくつかの間違い/設定ミスがある
ScriptAlias/cgi-bin/"D:\ webserver\cgi-bin"
httpd.conf
_にある必要があります。 _<Directory "D:\webserver">
_部分を以下に置き換える必要があります。_<Directory "D:\webserver\cgi-bin" /> AddHandler cgi-script .cgi .pl Options FollowSymLinks +ExecCGI AllowOverride None </Directory>
_
Perl test.cgi
cgi-bin
_ディレクトリとcgiスクリプトへの読み取りと書き込みの再帰的なアクセス許可があることを確認してください。また、書き込み権限を持つディレクトリまたはファイルを作成できます。そうでない場合は、書き込み許可を持つ他の場所に_cgi-bin
_ディレクトリを作成し、代わりに_httpd.conf
_のalias
およびdirectory
属性にそのパスを指定します。また、 このリンク が役立ちます。
(元の回答者によるものではなく、追加のコメント:cgi
モジュールを有効にする必要があるかもしれません。私にとっては、cgiをApache 2の新規インストールは_Sudo a2enmod cgi
_でした。それを行う前は、Webサイトでスクリプトの内容が表示されていました。)
_
Sudo a2enmod cgi
_
apacheの新しいバージョンを変更します:オプション+ FollowSymLinks + ExecCGI
ディレクトリ/場所/ファイルには、適切なハンドラが関連付けられていないか、ExecCGI
オプションが有効になっていません。 Apacheチュートリアル:CGIを使用した動的コンテンツ を参照してください。
mac OS x 10.8で
私はこれをしなければなりませんでした
<Directory />
Options FollowSymLinks +ExecCGI
AllowOverride None
</Directory>
そして
これのコメントを外します
#AddHandler cgi-script .cgi .pl
ブラウザがスクリプトのコードを印刷している場合、それはスクリプトを実行するアプリケーションを見つけることができないことを意味します。
Apache 2.4
(OSX Yosemite、10.10.5)を使用して、間違ったパスでシェバン行を使用すると、ブラウザーに次のように表示されます。
内部サーバーエラー
しかし、有効なShebangラインを使用しても、受け入れられた回答のアドバイスに従うことで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プログラムも実行可能ファイルである必要があります。そうでない場合、Internal Serverエラーが発生します。
$ chmod a+x myprog.pl
a+x
=> all +実行可能ファイル。言い換えれば、所有者、グループ、その他のそれぞれに実行権限を追加します。
また、少なくともcgiプログラムは、応答の本文を出力する前にContent-Type header
を生成する必要があります。
print "Content-Type: text/html\n\n";
print "<h1>Hello, World.</h1>";
(ちなみに、その正確なコードはPerl、python、またはRubyで動作します。)そうでない場合は、Internal Serverエラーが再度発生します。
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 docs はそのオプションでApacheをインストールするように言っていたので、先に進んでこれを行いました:
~/Downloads/httpd-2.4.18$ ./configure --enable-so
...
...
~/Downloads/httpd-2.4.18$ make
...
...
~/Downloads/httpd-2.4.18$ Sudo make install
Apache DSOドキュメント ここ 。
# 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>