Как использовать WSGI для перенаправления пользователя с http на https

Исходный вопрос


App Engine SDK 1.6.5
Питон 2.7
webapp2

Я внедрил схемы webapp2 для защиты страниц по протоколу https. Проблема в том, что когда пользователь говорит http://site/login вместо https://site/login, он получает ошибку 404 из-за того, что схемы не распознают маршрут.

пример main.py

#  Libraries
import webapp2

#  Local Controllers
from controllers.HomeHandler import HomeHandler
from controllers.LoginHandler import LoginHandler

app = webapp2.WSGIApplication([
    webapp2.Route(r'/', HomeHandler),
    webapp2.Route(r'/login', LoginHandler, schemes=['https'], name='login')
], debug=True)

Я добавил еще один маршрут/контроллер ниже маршрута https для перехвата HTTP-запросов:
webapp2.Route(r'/login', RouteLogin)

RouteLogin.py

#  Libraries
import webapp2

class RouteLogin(webapp2.RequestHandler):
    def get(self):
        self.redirect('https://site.appspot.com/login')

Это работает, но, кажется, должен быть лучший способ сделать это. Например, использование htaccess на веб-сервере Apache. Это слишком похоже на взлом, на мой вкус. Мне действительно не нравятся жестко закодированные URL-адреса в моем коде. Не говоря уже о том, что это 2 запроса, которые для входа в систему не имеют большого значения, но могут быть и другие примеры, когда это оказывается слишком дорого.

ПРИМЕЧАНИЕ 1. Если вы просматриваете это решение, имейте в виду, что использование схем HTTPS также означает, что вы не сможете использовать консоль разработчика, не удалив СХЕМУ или не настроив переменную, заданную для dev.

ПРИМЕЧАНИЕ 2. Мне удалось получить программный способ обслуживания HTTPS вместо HTTP. Я был на правильном пути с комментарием ниже, но он нуждается в аргументе.

webapp2.uri_for('login', _scheme='https')
Это даст вам правильный https://someapp.appspot.com/loginURL. К сожалению, это не решает мою основную проблему, заключающуюся в том, как обрабатывать людей, вводящих URL-адрес в адресную строку без https и получающих сообщение об ошибке, если только я не использую хак, описанный выше.Поэтому я все еще ищу способ WSGI для маршрутизации запросов доходов на HTTPS.

Правки: добавлено примечание 1 и уточнено название. Мне показалось очевидным, что я использовал WSGI из исходного кода, а не CGI.

7
задан Mark Finch 1 June 2012 в 03:27
поделиться