Python重定向到URL不起作用

时间:2016-02-12 19:16:35

标签: javascript python url redirect cgi

我知道还有其他帖子,但我已经尝试了我能想到的一切,但仍然无法在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)

3 个答案:

答案 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