Django: как перенаправить на внешний URL?

[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, и он действительно пытается неверный URL:

"""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-адресов в URL-адреса - не лучшая идея. И apache, и mod_wsgi сворачивают двойную косую черту. ( вот объяснение )

Но указание целевого URL в качестве параметра работает нормально:

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

Большое спасибо Шону Ф из службы поддержки Webfaction за помощь.

Ответов (1)

Решение

Как у вас работает сервер mod_wsgi? Я ожидаю, что, поскольку вы запускаете локальный сервер напрямую через Django, переписывание URL-адресов не происходит. На удаленном сервере URL-адрес переписывается, чтобы удалить двойную косую черту, прежде чем он будет передан вашему приложению django.