2009-09-21 5 views
1

장고 사이트에서 뷰 객체의 "HttpResponseRedirect"를 호출하여 다른 URL로 리디렉션 할 때마다 하위 도메인을 제거하고 기본 사이트로 돌아갑니다. 내가 장고의 SVN 지점에서 일하고있다.
Django의 HttpResponseRedirect가 내 하위 도메인에서 제거 된 것 같습니다.

 
#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 


이 작업이 완료되는 이유가 여기있다 : 예입니다? 하위 도메인을 포함한 전체 경로로 리디렉션해야합니까?

답변

4

장고에는 응답에 항상 적용되는 몇 가지 방법이 있습니다. 이 중 하나는 django.http.utils.fix_location_header입니다. 이렇게하면 리디렉션 응답에 항상 절대 URI (HTTP 사양에서 요구하는대로)가 포함됩니다.

이 방법은 request.build_absolute_uri을 사용하며, request.get_host을 사용합니다. get_host은 을 사용하여 request.META에서 HTTP_HOST을 얻으려고합니다.

내 생각에 귀하의 서버는 HTTP_HOST을 제공하지 않고 SERVER_NAMEmydomain.com으로 설정되어 있습니다.

이제 원하는 것을 알았 으면 좋겠다. 몇 가지 테스트를 통해 무엇이 잘못되었는지 확인하십시오.

+2

참고로이 답변은 "장고가 때때로 https에서 http로 리디렉션되는 이유는 무엇입니까?"라는 문제를 해결하는 데 유용합니다. (예 : 로그인 양식 이후). 서버 또는 리버스 프록시가 Django에 정확한'request.is_secure'를 제공하지 않으면'fix_location_header'는 리다이렉트 절대 값을 만들 때 그 스키마를 잘못 가져옵니다. – medmunds

+0

@medmunds django는 상대 URL에서 리디렉션을 만들 때 https에서 http로 리디렉션합니다. 서버/프록시가 문제를 해결하기 위해 정확히 설정해야하는 HTTP 헤더의 종류는 무엇입니까? – thedk

+1

@thedk X-Forwarded-Proto 또는 X-Forwarded-SSL과 같은 것이 될 것이고, 장고에게주의를 기울일 것을 요구할 필요가 있습니다. https://docs.djangoproject.com/ko/1.4/ref/settings/#secure-proxy-ssl-header에서 SECURE_PROXY_SSL_HEADER를 확인하십시오 (보안 경고를 심각하게 고려하십시오). 또한 "django request.is_secure"를 검색하면 1.4 이전의 다른 몇 가지 해결책이 나타납니다. – medmunds

관련 문제