【发布时间】:2013-03-05 16:31:10
【问题描述】:
我一直在尝试在 Windows 7 上运行一个简单的 perl-cgi 脚本。这是一个带有 OK 按钮的简单 HTML 表单,单击 OK 按钮会显示一些文本。但是点击 HTML 页面上的 OK 按钮,浏览器开始下载脚本,而不是执行和显示 perl 文件的输出。我在 httpd.conf 中添加了处理程序
AddHandler cgi-script .pl
但这无济于事。我在 httpd.conf 中添加了 ExecCGI 选项,但这也没有帮助。
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
这里是使用的 perl 脚本:
#!C:\Perl\bin\perl
use CGI;
print "Content-type: text/plain","\n\n";
print "<html>","\n";
print "<head>\n\t<title>Server Information Ready</title>\n</head>","\n";
print "<body>","\n";
print "<h1>Server Information</h1>","\n";
print "</body></html>","\n";
这里是html文件:
<html>
<head><title>Server Information</title></head>
<body bgcolor="#EEAA55">
<h3>Please click OK to get the server information</h3>
<hr><pre>
<form action="http://localhost/cgi-bin/ctest/pranav1a.pl" method="post">
<input type="submit" value="OK">
</form>
</hr></pre>
</body>
</html>
我已经在 chrome、IE 和 Mozilla 上尝试过这个。 Mozilla 和 chrome 开始下载 perl 文件,但 IE 在单击 OK 按钮时只会显示一些奇怪的内容。 如何让浏览器显示文件执行的输出而不是开始脚本下载?
PS:我曾尝试将 shebang 行用作 '#!c:/Perl/bin/perl',但这似乎也不起作用。从 cmd 提示符执行时,我可以看到 perl 脚本的输出。
【问题讨论】:
-
您是否在实时服务器上对此进行了测试。 localhost 可能有这些问题,因为您需要配置很多选项。我建议你在生产环境中尝试一下
-
在 httpd.conf 中,确保这行没有注释:
LoadModule cgi_module modules/mod_cgi.so添加一个 ScriptAlias:<IfModule alias_module>ScriptAlias /cgi-bin/ "C:/BitNami/apache2/cgi-bin/"</IfModule>ScriptAliases 与 Aliases 基本相同,只是目标目录中的文档被视为应用程序和在请求时由服务器运行,而不是作为发送给客户端的文档。 -
既然您决定使用 .pl 而不是 .cgi,您需要将其添加到 httpd.conf:
AddHandler cgi-script .pl(可能已经有一个 .cgi 扩展名;如果没有, 也添加它。你可能想把你的 .pl 放在 /cgi-bin 而不是子目录 ctest 中。