2013-08-31 100 views
1

我的django網站正在運行http://localhost:8000。我正在嘗試將它們重定向回網站的根網址,但它無法正常工作。它不斷嘗試將我重定向回http://localhost並丟棄端口。我究竟做錯了什麼?Django沒有正確重定向

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我有這樣的:我使用的是流浪漢,運行在虛擬機上的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監聽端口:80在虛擬機,我有我的本地端口8000轉發到虛擬局域網上的端口:80,然後輪到虛擬機上的端口:8000。我通過運行啓動網站python -B manage.py runserver 8000

+1

什麼是你的'urls.py'是什麼樣子? –

+0

@Micah會返回HttpResponseRedirect(「/」)'嗎? – alecxe

+0

否HttpResponseRedirect(「/」)做同樣的事情。 – Micah

回答

2

我在這裏看到一些問題。

  1. 你不應該轉發8000到任何東西。您應該讓nginx在端口80上偵聽,然後添加指向127.0.0.1:8000的上游服務器並在該端口上啓動runserver。一旦你完成了,你的URL都應該沒有端口。如果您希望鏈接正常工作,請將端口80從vagrantfile轉發到您的主機。或者你可以通過從你的設置中刪除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:-header的主機名/端口。我認爲你需要配置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/; 
    } 
}