我有一个CGI处理HTTP服务器的以下最小代码,源自内管上的几个例子:
#!/usr/bin/env python
import BaseHTTPServer
import CGIHTTPServer
import cgitb;
cgitb.enable() # Error reporting
server = BaseHTTPServer.HTTPServer
handler = CGIHTTPServer.CGIHTTPRequestHandler
server_address = ("", 8000)
handler.cgi_directories = [""]
httpd = server(server_address, handler)
httpd.serve_forever()
然而,当我执行脚本并尝试使用http:// localhost:8000 / test.py通过CGI在同一目录中运行测试脚本时,我看到脚本的文本而不是执行的结果.
权限都设置正确,测试脚本本身不是问题(因为我可以使用python -m CGIHTTPServer运行它,当脚本驻留在cgi-bin中).我怀疑这个问题与默认的CGI目录有关.
如何让脚本执行?
解决方法:
我的怀疑是正确的.从中派生此代码的示例显示了将默认目录设置为服务器脚本所在的同一目录的错误方法.要以这种方式设置默认目录,请使用:
handler.cgi_directories = ["/"]
警告:如果您不在任何类型的防火墙后面,这会打开潜在的巨大安全漏洞.这只是一个有益的例子.仅在极度小心的情况下使用