2013-08-31 74 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/; 
    } 
}