【发布时间】:2016-09-12 15:14:46
【问题描述】:
我正在尝试帮助一位同事在他的 mac 上进行测试设置,以便他可以运行 CGI 脚本。我是一个 linux 人,他不是服务器人,所以我们之间很难让最基本的设置正常工作。以下是我们迄今为止所做的:
安装/启用 apache:
sudo apachectl start
编辑文件/etc/apache2/httpd.conf 并取消注释此行:
#AddHandler cgi-script .cgi
在同一文件中,编辑以Options 开头的行并将+ExecCGI 添加到选项列表中。
在/Library/WebServer/CGI-Executables 中安装示例 perl CGI 脚本 test.cgi 并使其成为全球可执行文件。源代码:
#!/opt/local/bin/perl
print "Content-Type: text/html\n\n";
print "<html> <head>\n";
print "<title>Hello, world!</title>";
print "</head>\n";
print "<body>\n";
print "<h1>Hello, world!</h1>\n";
print "</body> </html>\n";
当我们访问 URLhttp://localhost/cgi-bin/test.cgi 时,结果是 http 错误代码 304,意思是“未修改”。这对我来说没有多大意义。它通常似乎与缓存有关,这似乎与我们的情况无关。
apache 错误日志中没有显示任何内容。我们可以看出 apache 正在寻找脚本,因为在我们添加 +ExecCGI 选项之前,浏览器会显示脚本的源代码。我们尝试检查权限问题,确保所有内容都是世界可读和可执行的:
ls -ld /Library/WebServer/CGI-Executables
drwxr-xr-x 7 root wheel 238 Sep 2 13:58 /Library/WebServer/CGI-Executables
ls -l /Library/WebServer/CGI-Executables/test.cgi
-rwxr-xr-x 1 root wheel 343 Sep 2 13:58 /Library/WebServer/CGI-Executables/test.cgi
脚本的所有者和组与脚本所在目录的所有者和组相同,这似乎是合理的。
任何人都可以就可能出现的问题以及如何解决问题提供任何建议吗?
【问题讨论】:
-
你能从 shell 调用
/Library/WebServer/CGI-Executables/test.cgi(像那样)吗?如果向 URL 添加 GET 参数会发生什么,例如。http://localhost/cgi-bin/test.cgi?test? -
你能从一些命令行客户端发布完整的逐字响应头吗?