[英]Django redirect() truncating URLs to domain name on production server using HTTPS
我正在運行Django 1.8,Python 2.7。 我注意到站點上的重定向問題似乎只影響使用HTTPS協議的生產服務器,而不會影響運行純HTTP的登台服務器或開發服務器。
作為示例,我確定了兩個簡單的問題,這些問題目前在HTTPS上對我不起作用:
參觀https://www.eduduck.com/support/thanks沒有尾隨斜線重定向到https://www.eduduck.com/而不是附加一個斜線和重定向到的https://www.eduduck.com/support/謝謝/(與我期望的一樣)(默認設置)APPEND_SLASH = True。
使用HTTPS時,提交有效的支持表格“錯誤地”重定向到https://www.eduduck.com/網站的基本URL,但在HTTP上可以正常使用,重定向到/ support / thanks /
都是常規的東西,或者應該是。 對此很困惑; 非常感謝收到的所有指針。 注意:問題僅出現在HTTPS下
support / urls.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')),
]
support / forms.py
from django import forms
class SupportForm(forms.Form):
"""General request for support or contact"""
subject = forms.CharField(max_length = 100)
email = forms.EmailField(label='Your email')
message = forms.CharField(widget = forms.Textarea)
def clean_message(self):
"""Sensible messages cannot be too short"""
message = self.cleaned_data['message']
wc = len(message.split())
if wc < 4:
raise forms.ValidationError(
"Please muster four or more words of wisdom or woe!"
)
return message
support / views.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},
)
所以最后,是的,這是我的nginx配置。 我有一個舊的啟用了站點的默認配置文件,該文件已刪除。 這取得了一些進展,但是我還必須編輯生產站點的配置文件。 最終(工作)服務器塊的差異如下所示:
server {
- listen [::]:80 default_server;
+ listen 80 default_server;
server_name www.example.com;
return 301 https://$host$request_uri
}
正如我在較早的評論中提到的那樣,盡管閱讀了文檔,但我仍然不完全知道[::]:80出了什么問題,我認為這是為了實現IPv6兼容性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.