2011-08-29 5 views
1

django 프로젝트가 localhost에서 실행 중이며 제대로 작동하고 있지만 실제 서버에 업로드하면 URL에 문제가 발생하기 시작했습니다. 그 때마다 HttpResponseRedirect를을 발생 또는 리디렉션 내 로컬 호스트에 Django 님이 요청한 URL이 이상하게되었습니다.

페이지

를 호출되는

http://127.0.0.1:8000/signin 

동안 서버에 내가

GET signin 301 MOVED PERMANENTLY 
GET signin http://xyz.com,%20xyz.com/signin 
을 볼 불을 지르고에서

http://xyz.com,%20xyz.com/signin 

된다

나는 urls.p y는^signin/$ ^을 가지고 있고 APPEND_SLASH = settings.py에서 True이면 방문/로그인/작동합니다! 이 URL에 [쉼표] [공간]을 추가하고 리디렉션되는 어떤 이유로 서버

Request URL: http://xyz.com,%20xyz.com/test 

내 로컬 호스트

Request URL: http://127.0.0.1:8000/test 


404 페이지.


홈 페이지 내가 같은 응용 프로그램에서 당신과 함께 일하고 있어요 이후는 대답하지 않을 수있는 문제

답변

3

문제는 다음 표에 추적 :
https://code.djangoproject.com/ticket/11877

그것은 장고 프록시 리디렉션을 처리하는 방법과 관련이있다. 다음 미들웨어가 도움이 될 것입니다.

class MultipleProxyMiddleware(object): 
    FORWARDED_FOR_FIELDS = [ 
     'HTTP_X_FORWARDED_FOR', 
     'HTTP_X_FORWARDED_HOST', 
     'HTTP_X_FORWARDED_SERVER', 
    ] 

    def process_request(self, request): 
     """ 
     Rewrites the proxy headers so that only the most 
     recent proxy is used. 
     """ 
     for field in self.FORWARDED_FOR_FIELDS: 
      if field in request.META: 
       if ',' in request.META[field]: 
        parts = request.META[field].split(',') 
        request.META[field] = parts[-1].strip() 

는 예를 들어, 장고 사이트는 X-Forwarded-For 헤더에있는 프록시 정보를 포함하는 프록시 뒤에 앉아있다, 경우 다음 웹 서버는 프록시가하는, 헤더 (쉼표 목록이 포함됩니다 분리 된). 이 미들웨어를 사용하면 헤더의 프록시 된 주소 중 하나를 제외한 모든 주소를 제거합니다.

1

없이 작동하고, 나는 그것을 해결했습니다.

아파치 리디렉션에 nginx와 관련이 있습니다. 우리는 proxy_set_header Host $host;을 사용했고 비활성화했을 때 오류없이 작동했습니다.

+0

이것이 원인이지만 올바른 헤더 정보를 전달하려면 내 대답에 미들웨어 사용을 고려하십시오. –

관련 문제