Django:如何重定向到外部URL?

时间:2009-02-26 07:02:29

标签: django http url redirect http-headers

[Django 1.0.2]

我的视图设置如下:

(r'^redirect/(?P<object_id>\d+)/(?P<url>.*)/$',
    'django.views.generic.simple.redirect_to',
    {'content_type': SiteType}, 'clickout'),

当我得到以下URL时,本地开发服务器和远程mod_wsgi服务器上会发生两种不同的事情:

# GET
"/redirect/2/http://www.example.com//"

# Remote server ends up (note the missing slash in the end)
"http://mydomain.com/example.com"

# Development server works as expected
"http://www.example.com/"

我检查了HTTP标头,它确实尝试了错误的网址:

"""HTTP/1.x 301 MOVED PERMANENTLY

Date: Thu, 26 Feb 2009 06:58:35 GMT

Server: Apache/2.0.52 (Red Hat) mod_wsgi/2.0 Python/2.5

Etag: "d41d8cd98f00b204e9800998ecf8427e"

Location: http://mydomain.com/example.com
Content-Type: text/html; charset=utf-8

Vary: User-Agent,Accept-Encoding

Content-Encoding: gzip

Content-Length: 20

“”“

可能是什么问题?如何重定向到外部网址?

修改

似乎在URL中嵌入URL并不是一个好主意。 apache和mod_wsgi都是折叠双斜杠。 (here is an explanation

但是将目标网址作为参数可以正常工作:

"/redirect/2/?url=http://www.example.com/"

非常感谢Sean F从Webfaction支持帮助我。

1 个答案:

答案 0 :(得分:0)

你是如何运行mod_wsgi服务器的?我希望因为你直接通过Django运行本地服务器,所以不会重写url。在远程服务器上,url会被重写,以便在传递给django应用程序之前删除双斜杠。