我正在尝试使用python脚本实现CGI。每当我打开127.0.0.1/hello
时,文件就会被下载而不是执行。以下是我在000-default.conf
sites-available
文件
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
AddHandler cgi-script .py
</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>
我在
中安装了python/home/musigma/anaconda3/bin
所以我将以下作为shebang行添加到我的python文件
#!/home/musigma/anaconda3/bin python3
以下是我的python文件的内容
#!/home/musigma/anaconda3/bin python3
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head><title>cgi script </title></head>")
print("<body>")
print('<p>I think it worked</p>')
for i in range(5):
print("<h1>hello world</h1>")
print("</body>")
print("</head>")
我已将文件放在/var/www
中。我还运行了以下行来使我的python文件成为可执行文件
sudo chmod 755 hello.py
但这仍然不能使我的python脚本成为可执行文件。文件被下载而不是执行。我不知道如何让事情发挥作用。任何方向都会有很大的帮助。我尝试过这些链接,但它们并没有达到我的目的。我已经照顾好了这些事情
Python CGI executable script downloads / shows script code
自从过去的四五个小时以来,我一直试图解决这个问题,并且不确定下一步该做什么。任何方向都会很棒。
PS:我使用的是ubuntu 16.04
apache版本
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2016-07-14T12:32:26
答案 0 :(得分:1)
仅设置目录/usr-lib/cgi-bin/
以允许可执行的CGI脚本。这就是:
Options +ExecCGI
表示。
因此,请按照已指出的方式修复#!
行,然后将脚本移至目录/usr-lib/cgi-bin/
。
最后,使用/cgi-bin/hello.py
的网址路径。
有关为可执行CGI脚本设置Apache的更多信息,请参阅Apache文档:
答案 1 :(得分:0)
如果您将文件复制/符号链接到 hello.cgi
和hello.py
怎么办?那么127.0.0.1/hello.cgi
和127.0.0.1/hello.py
会产生源代码或执行结果吗?
尝试从以下位置更改脚本的第一行:
#!/home/musigma/anaconda3/bin python3
为:
#!/home/musigma/anaconda3/bin/python3
另外,我原本认为默认情况下你的脚本的路径是127.0.0.1/hello.py(包括扩展名)。