7

我在 Windows 上运行 Apache Web 服务器,以便处理一些 Perl CGI 脚本。在生产中,这些脚本在 linux 机器上运行,并且在源代码存储库中它们都有 shebangs,例如:#!/usr/bin/perl,但在我的 windows 机器上,shebangs 会是#!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 只要有正确的 shebang 就可以在这台服务器上工作。

但是当我尝试在没有 shebang 的情况下访问 CGI 时,apache 日志会吐出:

找不到类型为“.cgi”的文件的 Exec CGI 动词

任何想法,见解,甚至是疯狂的猜测都会受到赞赏。

谢谢。

4

3 回答 3

10

听起来 ScriptInterpreterSource 行被忽略了。如果它设置为 Registry 或 Registry-Strict,它应该忽略 shebang 行并使用注册表。

此外,Apache 2.2 文档的注册表项位置略有不同:

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

这也适用于 Python 脚本。我执行以下操作来修复我的 Apache 安装以忽略脚本中的 shebang 要求。如果没有这个,当前版本的 Apache 2.4 中需要 shebang - 或者至少在我的版本中。

# tell apache to use registry - this requried a registry hack
# to the following: 
# [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command] = "c:\\python\\python.exe"
ScriptInterpreterSource Registry-Strict
于 2015-07-18T00:20:26.110 回答
0

与其在单独的 CGI 进程中运行 perl 代码,不如考虑使用mod_perl(参见http://perl.apache.org)。

Mod_perl 效率更高,因为 Perl 代码只加载和解析一次,然后直接在 Apache 进程中运行,无需启动或与其他进程通信。

于 2008-12-24T20:53:19.150 回答