ErrorDocument CGI 未执行,显示源代码

ErrorDocument CGI 未执行,显示源代码

在 Apache HTTP 服务器 2.2 上,ErrorDocument 在我的配置中有一个 PHP CGI 脚本,它显示一条不错的消息并对多个错误代码做出反应,并显示每个错误代码的附加信息。这很好用。

但升级到2.4版本后,就不再执行了。相反,会显示该文件的完整源代码,包括第一行,请参见下文。这是怎么回事?

配置非常简单:

ErrorDocument 401 /cgi-bin/error.cgi
ErrorDocument 403 /cgi-bin/error.cgi
ErrorDocument 404 /cgi-bin/error.cgi
ErrorDocument 500 /cgi-bin/error.cgi

该文件由正确的用户和组拥有并且可执行。它看起来像这样:

#!/usr/bin/php-cgi
<?
$errorCode = $_SERVER['REDIRECT_STATUS'];
$reqUrl = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
...

访问日志包含带有错误代码的预期条目,例如 500 或 403。错误日志告诉我客户端在我的受限目录中被拒绝,这也是预期的。

但为什么错误文档文件根本不再执行呢?

Ubuntu 14.04 上的 Apache 版本为 2.2.x 到 2.4.7。

更新:conf-enabled/serve-cgi-bin.conf 已激活。这是我的 VirtualHost 配置的一部分:

<VirtualHost 1.2.3.4:80 [1:2:3::4]:80>
    ServerName example.de
    ServerAlias www.example.de
    DocumentRoot /var/www/web001
    ErrorDocument 401 /cgi-bin/error.cgi
    ErrorDocument 403 /cgi-bin/error.cgi
    ErrorDocument 404 /cgi-bin/error.cgi
    ErrorDocument 500 /cgi-bin/error.cgi
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xhtml+xml application/x-javascript text/
    SuexecUserGroup web001 webusers
    ScriptAlias /cgi-bin/ /var/www/web001/cgi-bin/
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/web001/cgi-bin/php-fcgi .php
    <Directory "/var/www/web001">
        Options +Includes +ExecCGI
    </Directory>
</VirtualHost>

答案1

详细比较新旧默认配置发现不再包含 cgid 模块。启用后,错误 CGI 页面再次按预期工作。我想任何其他 CGI 页面也不会起作用,但我不经常使用它们,所以我没有注意到。不确定这是否是与 Ubuntu 相关的更改,或者今天是否所有 Apache 安装都未启用 CGI。

这是快速修复:

a2enmod cgid

然后重新启动阿帕奇。

相关内容