我看了很多有类似问题的帖子,但似乎都没有对我有用
我有以下 /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
包已安装。