2013-08-31 4 views
1

내 django 웹 사이트가 http://localhost:8000으로 실행 중입니다. 웹 사이트의 루트 URL로 리디렉션하려고하지만 제대로 작동하지 않습니다. 그것은 나를 다시 http://localhost으로 리디렉션하고 포트를 삭제하려고 계속 노력합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?장고가 제대로 리디렉션되지 않습니다.

from django.shortcuts import redirect 

class Register(View): 

    def post(self, request): 
     return redirect('/') 

이 내 home/urls.py 파일입니다

from home.views import (
    Index, 
    Feed, 
    Search, 
    Profile, 
    Register, 
    Login, 
) 

urlpatterns = patterns(
    '', 
    url(r'^$', Index.as_view()), 
    url(r'^feed$', Feed.as_view()), 
    url(r'^feed$', Feed.as_view()), 
    url(r'^search$', Search.as_view()), 
    url(r'^profile$', Profile.as_view()), 
    url(r'^profile/(?P<id>\d+)/?(.+)$', Profile.as_view()), 
    url(r'^register$', Register.as_view()), 
    url(r'^login$', Login.as_view()), 
    url(r'^login$', 'login', name='login'), 
) 

그리고 app/urls.py

내가 이것을 가지고 : 나는 방랑 사용하고 VM에서의 nginx를 실행 해요

urlpatterns = patterns('', 
    url(r'^favicon\.ico$', RedirectView.as_view(url="%simg/favicon.ico" % django.conf.settings.STATIC_URL)), 
    url(r'^', include('home.urls')), 
) 

FWIW. 나는 포트에서 듣고있는 nginx를 가지고있다. VM에서 80이고 포트 8000으로 포워딩 된 나의 로컬 포트 ​​8000을 가지고있다. 실행하여 사이트를 시작합니다. python -B manage.py runserver 8000

+1

무엇'처럼 보이는 urls.py' 않습니다 시도? –

+0

@Micah가'return HttpResponseRedirect ("/")'작업을 수행합니까? – alecxe

+0

HttpResponseRedirect ("/")는 동일한 작업을 수행하지 않습니다. – Micah

답변

2

여기에 몇 가지 문제가 있습니다.

  1. 당신은 아무것도에 8000을 전달해서는 안된다. 포트 80에서 수신 대기하는 nginx가 있어야하고 127.0.0.1:8000을 가리키는 업스트림 서버를 추가하고 해당 포트에서 runserver를 시작하십시오. 이 작업을 완료하면 URL에 포트가 없어야합니다. 링크를 작동 시키려면 vagrantfile에서 호스트로 포트 80을 전달하십시오. 또는 설치에서 nginx를 제거하여 이러한 불쾌 함을 피할 수 있습니다.

  2. URL 패턴과 쿼리 문자열이 일치하지 않습니다. url(r'^profile/(?P<id>\d+)/?(.+)$', Profile.as_view()),은 두 번째 일치 항목을 인수로 전달하지 않습니다. 또한 중복 된 패턴이 있습니다.

  3. 마지막으로보기의 이름을 지정하십시오. 들어가기 좋은 습관입니다. 또한 리다이렉션에 도움이됩니다.

+0

문제는 확실히 nginx 관련되었습니다. 이제 해결되었습니다. "의견보기"란 무엇을 의미하는지 더 자세히 말해 줄 수 있습니까? – Micah

+1

@Micah - 문서에서 [이 섹션] (https://docs.djangoproject.com/en/1.5/topics/http/urls/#naming-url-patterns)을 확인하십시오. –

1

Location:-redirects 들어오는 Host: 헤더의 호스트 이름/포트를 사용하십시오. nginx를 구성해야한다고 생각합니다. 올바른 Host: -header를 보내거나 Location: -header를 수정하십시오.

은 (http://wiki.nginx.org/LikeApachehttp://wiki.nginx.org/HttpProxyModule#proxy_redirect에서)이 같은

server { 
    listen myhost:80; 
    server_name myhost; 
    location/{ 
    proxy_set_header X-Forwarded-Host $host; 
    proxy_set_header X-Forwarded-Server $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://myapp:8080; 
    proxy_redirect http://myapp:8080/ http://myhost/; 
    } 
} 
관련 문제