[英]CGI won't run just download on Apache server
我对 CGI 和 Apache 完全陌生,但我正在尝试一些东西。 首先,我用 C 编写了一个简单的 hello CGI。
#include <stdio.h>
void main() {
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>CGI Output</title></head>\n");
printf("<body>\n");
printf("<h1>Hello, world.</h1>\n") ;
printf("</body>\n");
printf("</html>\n");
}
编译它gcc hello.c -o hello.cgi
并将其放置在 /var/www/mycgi
之后我修改了 httpd.conf 以添加以下内容
ScriptAlias /mycgi/ "/var/www/mycgi/"
在 IfModule alias_module 和
<Directory "/var/www/mycgi">
Options +ExecCGI
AddHandler cgi-script .cgi
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
然后我重新启动了 Apache,当我转到 localhost/mycgi/hello.cgi 时,浏览器只是下载文件而不是运行它。 帮助将不胜感激!
根据janos的建议,您应该确保 apache2 已加载 cgi_module: LoadModule cgi_module modules/mod_cgi.so 。 您可以通过以下方式执行此操作:
sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load
然后重启apache2,这次它会加载cgi.load
文件。
即使这是一个老问题,我认为许多其他人也会遇到同样的问题......首先我们必须告诉 Apache 他必须“执行”什么样的文件以及这些文件在哪里:
编辑etc/apache2/apache2.conf (例如使用 nano)
添加
<Directory "/home/johnny/public_html">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
在这种情况下,Apache 将尝试执行位于用户“johnny”的 public_html 中以 .cgi 结尾的所有文件。 例如,您可以添加多个扩展名:
AddHandler cgi-script .cgi .pif .group
等等。
编译: cd 到 .c 源所在的文件夹,然后:
gcc hello.c
这将给出一个名为“a”的文件(或者可能是 a.out,这取决于操作系统)。 要更改结果的名称:
gcc hello.c -o ../public_html/my_cgi.group
如果 .group 已添加 AddHandler 和您想通过网络访问的 exec 文件。
在许多情况下,这会产生错误。 你可以试着改一下权限,exec等等,都没用。 问题出在很多情况下,我们以“root”身份运行gcc,因此结果所有者是root。 当我们尝试从网络执行它时,我们不是“root”。
解决方法是更换用户。 例如,如果您的 public_html 文件夹所有者是“johnny”,当您以 root 身份登录时,只需执行以下操作:
苏约翰尼
现在你“是”约翰尼。 只需 cd 到你的 c 文件所在的文件夹,使用 gcc 编译,你就可以从 web 执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.