此目录中的选项 ExecCGI 已关闭:/var/www/index.py

此目录中的选项 ExecCGI 已关闭:/var/www/index.py

我看了很多有类似问题的帖子,但似乎都没有对我有用

我有以下 /etc/apache2/httpd.conf 文件:

<Directory /var/www/index.py>
Options +ExecCGI
</Directory>

<Directory /var/www>
Options +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AddHandler cgi-script .py
DirectoryIndex index.py         

</Directory>

<Directory /var/www/tiles>
  AddHandler mod_python .py
  PythonHandler TileStache::modpythonHandler
  PythonOption config /home/TileStache/tilestache.cfg
</Directory>

当我尝试以以下方式访问主页时:仅主机名:http://exampleHost.com 我在错误日志中收到以下错误:

Options ExecCGI is off in this directory: /var/www/index.py

但是当我去http://exampleHost.com/index.py它工作正常。

所以我猜有什么东西覆盖了 /var/www 目录?我在 /var/www 目录中没有 .htaccess 文件。

答案1

我必须修改以下文件:

/etc/apache2/sites-enabled/000-default

更改 /var/www 目录以包含 +ExecCGI 和 AddHandler,如下所示:

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews +ExecCGI
            AllowOverride None
            Order allow,deny
            allow from all
            AddHandler cgi-script .py
    </Directory>

答案2

启用 cgi 模块后

sudo a2enmod cgi

你可以去修改文件

/etc/apache2/sites-enabled/000-default

找到这个部分

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

这告诉 apache,当你遇到 url 主机时,例如

localhost/cgi-bin/ 

它应该检查目录 /usr/lib/cgi-bin 中是否存在您请求的文件,如果找到,则执行该文件。现在,您可以通过在 Directory 指令中添加目录来使其从任何目录执行,例如,如果您希望它是 /var/www(cgi 文件所在的位置),您可以

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/var/www/">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
   </Directory>

并请求

localhost/script.cgi

应该可以完美运行。此外,请确保您有

libapache2-mod-perl

包已安装。

相关内容