HttpResponseRedirect от Django, кажется, убирает мой поддомен? - PullRequest
1 голос
/ 22 сентября 2009

Всякий раз, когда мой сайт django вызывает «HttpResponseRedirect» в объекте представления для перенаправления на другой URL, он удаляет поддомен и возвращается на основной сайт. Я работаю на ветке SVN в Джанго. Вот пример:

#Request comes in as https://sub1.mydomain.com
def view(request):
  return HttpResponseRedirect("/test_url") #The browser will actually get redirected to https://mydomain.com/test_url


Есть ли причина, по которой это сделано? Должен ли я перенаправить на полный путь, включая поддомен?

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

У Django есть несколько методов, которые он всегда применяет к ответу. Одним из них является django.http.utils.fix_location_header. Это гарантирует, что ответ на перенаправление всегда содержит абсолютный URI (как того требует спецификация HTTP).

Этот метод использует request.build_absolute_uri, который, в свою очередь, использует request.get_host. get_host пытается получить HTTP_HOST от request.META, возвращаясь к использованию SERVER_NAME.

Я предполагаю, что ваш сервер не предоставляет HTTP_HOST, а ваш SERVER_NAME установлен на mydomain.com.

Надеюсь, теперь вы знаете, что ищете, вы можете запустить несколько тестов, чтобы увидеть, что идет не так.

2 голосов
/ 22 сентября 2009

HttpResponseRedirect просто вернет код состояния 302 с установленным заголовком Location. Средство распознавания URL не будет учитывать поддомен (см. http://code.djangoproject.com/ticket/8896). Лучше всего либо восстановить его с нуля (HTTP_HOST на META), либо просто использовать промежуточное программное обеспечение http://thingsilearned.com/2009/01/05/using-subdomains-in-django/.

.

Приветствия

...