我知道还有其他帖子,但我已经尝试了我能想到的一切,但仍然无法在Linux服务器上获得简单的重定向作为CGI脚本。我尝试了3种不同的方法,但没有一种方法可行。我知道有些人会建议在导入后删除前两个打印语句,但这会给我500 Server错误。我想要做的就是在调用这个python CGI脚本时将浏览器重定向到另一个URL。
#!/usr/bin/env python
import cgi, cgitb
print "Content-Type: text/html"
print
def go_to_url(url):
print "HTTP/1.1 302 Found"
print "Location: ",url,"\r\n"
print "Connection: close \r\n"
print " "
def go_to_url2(url):
print ('<script type="text/javascript">window.location = ' + url + ';</script>')
def go_to_url3(url):
print '<html><head><script type="text/javascript">'
print '<!-- function jump(){window.location = "' + url + '" } //-->'
print '</script></head><body onLoad="jump()"></body></html>'
url = 'http://www.yahoo.com'
# go_to_url(url)
# go_to_url2(url)
go_to_url3(url)
答案 0 :(得分:0)
我解决了。这有效。其他重要问题需要注意, 1.在Windows系统上进行开发时,请确保将行结尾更改为Linux格式 2.将python文件chmod为755。
def go_to_url(url):
print ('<html><header><script type="text/javascript">window.location ="' + url + '";</script></header><body><p>Redirect2</p></body></html>')
答案 1 :(得分:0)
首先,请务必记住HTTP版本应该是客户端浏览器的动态,您不应该强制它。
HTTP重定向的Javascript解决方案会在性能方面产生更多开销。
因为第一个请求是针对带有JS重定向代码的HTML页面,所以第二个请求是针对重定向本身的(总共两个请求与一个请求)
我相信在您打印print "Content-Type: text/html"
之后,您无法重定向。
您的脚本应如下所示:
#!/usr/bin/env python
import cgi
def print_http_header():
print "Content-type: text/html; charset=UTF-8"
print
def go_to_url(url):
# HTTP version ( 1.0 / 1.1 / 2.0 ) should be determine by browser
print "Status: 302 Moved"
print "Location: %s" % url
print
def go_to_url2(url):
print_http_header()
print ('<script type="text/javascript">window.location = ' + url + ';</script>')
def go_to_url3(url):
print_http_header()
print '<html><head><script type="text/javascript">'
print '<!-- function jump(){window.location = "' + url + '" } //-->'
print '</script></head><body onLoad="jump()"></body></html>'
url = 'http://www.yahoo.com'
# go_to_url(url)
# go_to_url2(url)
go_to_url3(url)
希望有所帮助....
答案 2 :(得分:0)
我知道这很老了,但我希望这会有所帮助。它对我有用!
print ("Status: 302 Moved")
print ("Location: http://www.somedomain.com/")
print() # HTTP says you have to have a blank line between headers and content