在没有shebang的情况下在apache下执行CGI?或者如何以服务器中立的方式执行CGI

Edd*_*ett 6 apache legacy cgi web

所以我发现自己处于一种奇怪的情况,我需要在Apache Web服务器下理解旧的skool CGI(简单的CGI)执行.是的,我知道,在实际设置中我们使用Apache模块或FastCGI!但无论如何...

据我所知,Apache CGI脚本看起来像这样(在本例中为perl,但可以是任何东西):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
Run Code Online (Sandbox Code Playgroud)

这是从这里借来的:http://httpd.apache.org/docs/2.2/howto/cgi.html

然后,您将使用以下apache指令来确保perl脚本作为CGI执行:

<Directory ...>
    ...
    Options +ExecCGI                                             
    AddHandler cgi-script .pl
</Directory>
Run Code Online (Sandbox Code Playgroud)

这很好用.请注意Apache如何依赖shebang来决定运行脚本的解释器.

但是在lighttpd下,这种方式有所不同.在服务器配置中,我们明确说明要在每个文件扩展名的基础上使用哪个解释器,例如:

cgi.assign = (                                                                  
        ".php" => "/usr/local/bin/php",                          
        ".pl" => "/usr/bin/perl"                                                
)
Run Code Online (Sandbox Code Playgroud)

如果lighttpd来执行带有shebang的脚本,它似乎被忽略了.精细.

我的问题是,有没有办法在Apache中做这样的事情?我可以指定在服务器配置中使用哪个解释器,以便脚本不需要shebang.据推测,人们没有(当CGI出现的时候回来)将shebang添加到每个PHP文件中,以便应用程序可以在Apache/CGI中运行.

我一直无法在Apache文档中找到答案.也许你不能这样做?

编辑:此外,谁负责发送Content-Type标题.人们真的在CGI时代手动输出了吗?我不记得曾经看过这样做的PHP脚本.

干杯