Джанго: Как перенаправить на внешний URL? - PullRequest
1 голос
/ 26 февраля 2009

[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/"

Большое спасибо Sean F из Webfaction за помощь.

1 Ответ

0 голосов
/ 27 февраля 2009

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

...