元の質問
App Engine SDK 1.6.5
Python 2.7
webapp2
ページをhttpsに保護するためにwebapp2スキームを実装しました。問題は、ユーザーが https:// site/login の代わりに http:// 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)
http リクエストをキャッチするために、https ルートの下に別のルート / コントローラーを追加しました。
webapp2.Route(r'/login', RouteLogin)
RouteLogin.py
# Libraries
import webapp2
class RouteLogin(webapp2.RequestHandler):
def get(self):
self.redirect('https://site.appspot.com/login')
これは機能しますが、これを行うためのより良い方法があるはずです。Apache Web サーバーで htaccess を使用する場合と同様です。これは私の好みではあまりにもハックに似ています。コードに URL をハード コードするのはあまり好きではありません。ログインに大したことではないのは 2 つの要求であることは言うまでもありませんが、コストがかかりすぎる他の例がある可能性があります。
注 1: このソリューションを検討している場合は、HTTPS スキームを使用すると、SCHEME を削除するか、dev に設定した変数を構成しない限り、開発コンソールを使用できないことにも注意してください。
注 2: HTTP の代わりに HTTPS を提供するプログラム的な方法を得ることができました。以下のコメントで正しい軌道に乗っていましたが、引数が必要です。
webapp2.uri_for('login', _scheme='https')
これにより、正しいhttps://someapp.appspot.com/login URL が得られます。残念ながら、上記のハックを使用しない限り、httpsなしでアドレスバーにURLを入力してエラーを受け取る人を処理する方法という私の主な問題を処理しません. だから私はまだ所得要求をHTPPSにルーティングするWSGIの方法を探しています。
編集: 注 1 を追加し、タイトルを明確にしました。CGI ではなく、ソースから WSGI を使用していることは明らかだと思いました。