我正在尝试使用 apache2 将 Python 中的脚本作为 cgi 脚本执行。但是,文件并没有执行,而是被下载了。我已允许我的 Python 文件成为可执行文件。我认为发生这种情况是因为我的 shebang 行不正确。那么我怎么知道要添加的正确 shebang 行是什么呢?我安装了 Ubuntu 16.04 和 python 3.5.2。任何帮助/指导都将大有帮助。谢谢
编辑
添加 Python 脚本
#!/usr/bin/env python
import cgi
form = cgi.FieldStorage()
query = form.getvalue('query')
print("Content-type:text/html")
print()
print("<html>")
print("<head>")
print("<title>search results</title>")
print("</head>")
print("<body>")
print("\
<div style = 'position:absolute;text-align:center;width:100%;left:0%;top:0%;margin:0%;padding:0%;'>\
<h4 style = 'font-family:Arial;font-size:24px;color:dodgerblue;'>muGoogle</h4>\
<form class='form-wrapper' action='hello.py' method='get'>\
<input type='text' id='search' placeholder='Search docs related to...' required name = 'query' style = 'font-family:Arial;font-\size:14px;width:60%;height:40px;'/>\
<input type='submit' value='Submit' id='submit' style = 'height:40px'>")
print("<p> search results for: %s </p>" % query)
print("</body>")
print("</html>")
编辑2
添加 html
<html>
<head>
<title>muGoogle</title>
<link type = 'stylesheet' ref = 'style.css'>
</head>
<body>
<div style = 'position:absolute;text-align:center;width:100%;left:0%;top:15%;margin:0%;padding:0%;'>
<h4 style = 'font-family:Arial;font-size:48px;color:dodgerblue;'>muGoogle</h4>
<form class='form-wrapper' action='query.py' method='get'>
<input type='text' id='search' placeholder='Search docs related to...' required name = 'query' style = 'font-family:Arial;font-size:14px;width:60%;height:40px;'/>
<input type='submit' value='Submit' id='submit' style = 'height:40px'>
</form>
</div>
</body>
</html>
编辑3
添加默认配置文件
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks MultiViews
AllowOverride None
</Directory>
<Directory /var/www/>
Options ExecCGI Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddHandler cgi-script .py
</Directory>
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>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
答案1
如果文件被下载而不是由 Apache 运行,则表明运行该文件所需的模块尚未被 Apache 加载。对于 Python,有几个模块可以使用。这里使用的模块似乎是简单的 CGI 模块,因此请执行以下操作:
sudo a2enmod cgi
sudo service apache2 restart