7

いくつかの Perl CGI スクリプトで作業するために、Windows で Apache Web サーバーを実行しています。本番環境では、これらのスクリプトは Linux ボックスで実行され、ソース コード リポジトリではすべて次のような#!/usr/bin/perlシバンがありますが、私の Windows マシンではシバンは になる#!c:\perl\bin\perl.exeため、ソース コード ベースと競合します。

Apache ScriptInterpreterSourceディレクティブを入力します。

私はグーグルできることに基づいて、それを機能させようとしています。しかし、これまでのところ運がありません。私は持っている:

  1. これらを適切なディレクティブに追加しました AllowOverride None
    Options Indexes FollowSymLinks ExecCGI Order allow,deny Allow from all ScriptInterpreterSource Registry-Strict

  2. 追加: AddHandler cgi-script .cgi

  3. レジストリを編集し、新しい文字列を追加しました

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command=C:\Perl\bin\perl.exe

これで、CGI が適切なシバンを持っている限り、このサーバーで動作することがわかりました。

しかし、シバンなしで CGI にアクセスしようとすると、Apache ログが吐き出されます。

タイプ '.cgi' のファイルの Exec CGI Verb が見つかりません

考え、洞察、またはワイルドなお尻の推測さえもいただければ幸いです。

ありがとう。

4

3 に答える 3

10

ScriptInterpreterSource 行が無視されているようです。Registry または Registry-Strict に設定されている場合は、シバン行を無視し、レジストリのみを使用する必要があります。

また、Apache 2.2 のドキュメントでは、レジストリ キーの場所がわずかに異なります。

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command\(Default) => C:\Perl\bin\perl.exe -wT
于 2008-12-22T18:35:43.047 に答える
0

perl コードを個別の CGI プロセスで実行する代わりに、mod_perlの使用を検討してください ( http://perl.apache.orgを参照)。

Mod_perl ははるかに効率的です。Perl コードは 1 回だけ読み込まれて解析され、その後、他のプロセスを起動したり通信したりする必要がなく、Apache プロセス内で直接実行されます。

于 2008-12-24T20:53:19.150 に答える