Django redirect()使用HTTP将URL截断到生产服务器上的域名

2024-06-25 23:07:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行的是django1.8和python2.7。我注意到我的站点上有一个重定向问题,它似乎只影响使用HTTPS协议的生产服务器,而不影响运行纯HTTP的登台或开发服务器。在

举个例子,我发现了两个简单的东西,它们目前在HTTPS上对我不起作用:

  1. 访问不带尾随斜杠的https://www.eduduck.com/support/thanks将重定向到https://www.eduduck.com/,而不是像我在(默认设置)append_slash=True时所预期的那样追加斜杠并重定向到https://www.eduduck.com/support/thanks/

  2. 使用HTTPS时,“错误地”提交有效的支持表单将重定向到https://www.eduduck.com/网站基本url,但可以正确使用HTTP,重定向到/support/thanks/

都是例行公事,或者应该是。对此非常困惑;非常感激地接受了任何建议。NB:问题只出现在HTTPS下

支持/网址.py

from django.conf.urls import url
from django.views.generic import TemplateView

from . import views

urlpatterns = [
    url(r'^$', views.support, name='support'),
    url(
        r'^thanks/$',
        TemplateView.as_view(template_name ='support/thanks.html')),
]

支持/表单.py

^{pr2}$

支持/视图.py

from django.core.mail import send_mail

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.template import RequestContext

from .forms import SupportForm

import logging
logger = logging.getLogger(__name__)

def support(request):
    """Provide a support/contact email form"""

    logger.info('Support view')
    if request.method=="POST":
        form = SupportForm(request.POST)
        if form.is_valid():
            cdata = form.cleaned_data
            send_mail(cdata['subject'],
                      cdata['message'],
                      cdata.get('email', 'example@example.com'),
                        ['example@example.com'],
            )
            return HttpResponseRedirect('/support/thanks/')
    else:
        form = SupportForm()

    return render(
        request, 
        'support/support.html',
        {'support_form': form}, 
    )

Tags: djangofromhttpsimportformcomurlsupport
1条回答
网友
1楼 · 发布于 2024-06-25 23:07:06

最后,是的,这是我的nginx配置。我有一个旧的sites-enabled/default配置文件,我删除了它。这取得了一些进展,但我还必须编辑我的生产站点的配置文件。最终(工作)服务器块的差异如下所示:

server {
    - listen [::]:80 default_server; 
    + listen 80 default_server;
    server_name www.example.com;
    return 301 https://$host$request_uri
}

正如我在前面的评论中提到的,尽管阅读了这些文档,我仍然不清楚[::]:80有什么问题,我认为这是为了与IPv6兼容。在

相关问题 更多 >