你如何使用Apache“ScriptInterpreterSource Registry-Strict”指令?

时间:2008-12-19 02:06:24

标签: perl apache cgi

我在Windows上运行Apache Web服务器以便处理一些Perl CGI脚本。在生产中,这些脚本在linux机器上运行,在源代码库中,它们都有像#!/usr/bin/perl这样的shebang,但是在我的windows机器上,shebangs将是#!c:\perl\bin\perl.exe,所以我与它有冲突源代码库。

输入Apache ScriptInterpreterSource 指令。

我一直试图让它工作,基于我可以谷歌。但到目前为止还没有运气。我有:

  1. 将这些内容添加到适当的指令中 AllowOverride无 选项索引FollowSymLinks ExecCGI 订单允许,拒绝 允许所有人 ScriptInterpreterSource Registry-Strict

  2. 加入: AddHandler cgi-script .cgi

  3. 编辑了我的注册表并添加了一个新的字符串

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

    现在,我知道只要他们拥有合适的shebang,CGI就可以在这台服务器上运行。

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

      

    找不到Exec CGI Verb的文件   输入'.cgi'

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

    感谢。

3 个答案:

答案 0 :(得分:9)

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

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

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command\(Default) => C:\Perl\bin\perl.exe -wT

答案 1 :(得分: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

答案 2 :(得分:0)

不要在单独的CGI流程中运行perl代码,而应考虑使用 mod_perl (请参阅http://perl.apache.org)。

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