繁体   English   中英

CGI 不会只在 Apache 服务器上运行下载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM