我的django网站正在http://localhost:8000
运行。我正在尝试将它们重定向回网站的根网址,但它无法正常工作。它一直试图将我重定向回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
我有这个:
urlpatterns = patterns('',
url(r'^favicon\.ico$', RedirectView.as_view(url="%simg/favicon.ico" % django.conf.settings.STATIC_URL)),
url(r'^', include('home.urls')),
)
FWIW我在vm上使用vagrant并运行nginx。我有nginx监听端口:在vm中有80,我将本地端口8000转发到端口:vm上的端口,然后将其路由到端口:vm上的8000。我正在通过运行python -B manage.py runserver 8000
答案 0 :(得分:2)
我在这里看到一些问题。
你不应该将8000转发给任何东西。你应该让nginx监听端口80,然后添加一个指向127.0.0.1:8000的上游服务器并在该端口上启动runserver。完成后,您的网址应该都没有端口。如果希望链接起作用,请将端口80从vagrantfile转发到主机。或者你可以通过从你的设置中删除nginx来避免所有这些不愉快。
网址格式与查询字符串不匹配url(r'^profile/(?P<id>\d+)/?(.+)$', Profile.as_view()),
不会将第二个匹配作为参数传递。你也有重复的模式。
最后,考虑命名您的观点。进入是一个好习惯。它还有助于重定向。
答案 1 :(得分:1)
Location:
-redirects使用传入的Host:
- 标头中的主机名/端口。我认为您需要配置nginx:发送正确的Host:
- 标头或修复Location:
- 标头。
尝试这样的事情(来自http://wiki.nginx.org/LikeApache和http://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/;
}
}