【问题标题】:CGI won't run just download on Apache serverCGI 不会运行,只是在 Apache 服务器上下载
【发布时间】:2013-10-12 15:36:27
【问题描述】:

我对 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 时,浏览器只是下载文件而不是运行它。非常感谢您的帮助!

【问题讨论】:

  • 文件是否可执行? (chmod +x hello.cgi) 你加载了cgi_module 吗? (LoadModule cgi_module modules/mod_cgi.so)

标签: c apache cgi


【解决方案1】:

根据janos的建议,你应该确保apache2有loaded the 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文件。

【讨论】:

    【解决方案2】:

    即使这是一个老问题,我想很多其他人也会遇到同样的问题...... 首先我们必须告诉 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 .gloup

    等等。

    编译:cd到.c源码所在的文件夹,然后:

    gcc hello.c

    这将给出一个名为“a”的文件(或者可能是 a.out,它取决于操作系统)。 要更改结果的名称:

    gcc hello.c -o ../public_html/my_cgi.gloup

    如果 .gloup 已经添加了 AddHandler 以及您想通过网络访问的 exec 文件。

    在很多情况下,这会报错。你可以试试改权限,exec之类的,没用。 问题出在很多情况下,我们以“root”身份运行 gcc,因此结果所有者是 root。当我们尝试从网络上执行它时,我们不是“root”。

    解决方法是更换用户。例如,如果您的 public_html 文件夹所有者是“johnny”,当您以 root 身份登录时,只需执行以下操作:

    苏-约翰尼

    现在你“是”约翰尼。只需 cd 到你的 c 文件所在的文件夹,使用 gcc 编译,你就可以从网络上执行。

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 2018-01-30
      • 2023-04-05
      • 2013-03-30
      • 1970-01-01
      • 2015-03-24
      • 2015-09-29
      • 2012-07-27
      相关资源
      最近更新 更多