使用 Apache2 服务 python CGI 脚本

Serving python CGI script with Apache2

我正在尝试从网页调用 Python 脚本,但 apache2 未执行该脚本。这些文件是:

test.py

#!/usr/bin/env python
print "Content-type: text/html\n\n"
print "<h1>Hello World</h1>"

index.html

<form action="./test.py" method="POST">
    <input type="text" size="70" name="data" value=""><br>
    <input type="submit" value="Submit">
    <input type="reset" value="Reset">
</form>

我已启用 a2enmod cgi 并按如下方式编辑了 Apache 设置:

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
...
<directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    AddHandler cgi-script .py
    Require all granted
</directory>
</VirtualHost>

网页文件所有权是:

# ls -lh /var/www/html/
total 16K
-rw-r--r-- 1 root root  342 May 30 13:34 index.html
-rwxr-xr-x 1 root root   88 May 30 14:11 test.py

运行 apachectl -M 显示第 cgid_module (shared).

行的列表

打开页面时我可以看到表格,但是当我单击 'Submit' 时浏览器提示下载 test.py (FF) 或查看它 (Chrome) .知道我在这里弄错了什么吗?

如评论中所述。此目录配置看起来像是来自示例的普通副本,而您的 Web 根目录可能在其他地方。

<VirtualHost *:80>
    <directory "/var/www/htdocs">
        AllowOverride None Options
        +ExecCGI -MultiViews 
        +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all 
        AddHandler cgi-script .py
        Require all granted
    </directory>
</VirtualHost>

例如目录改变的地方。这通常是默认路径,如果您的路径是 /var/www/html,请相应更改。

我之前已经搞砸了,但这个问题在 serverfault 上可能会更好,因为这与 apache 的配置方式密切相关。