我在Heroku(雪松堆栈)上有python/Django应用程序,并想让它只能通过https访问.我已经启用了"SSL Piggyback"选项,并且可以通过https连接到它.
但是,禁用http访问或重定向到https的最佳方式是什么?
我在Heroku(雪松堆栈)上有python/Django应用程序,并想让它只能通过https访问.我已经启用了"SSL Piggyback"选项,并且可以通过https连接到它.
但是,禁用http访问或重定向到https的最佳方式是什么?
将@CraigKerstiens和@allanlei的答案组合成我已经测试并验证有效的东西.当REQUEST为SSL时,Heroku将HTTP_X_FORWARD_PROTO设置为https,我们可以用这个来判断:
from django.conf import settings
from django.http import HttpResponseRedirect
class SSLMiddleware(object):
def process_request(self, request):
if not any([settings.DEBUG, request.is_secure(), request.META.get("HTTP_X_FORWARDED_PROTO", "") == 'https']):
url = request.build_absolute_uri(request.get_full_path())
secure_url = url.replace("http://", "https://")
return HttpResponseRedirect(secure_url)