2016-12-18 4 views
1

私はpyramidフレームワーク上にアプリを持っており、どこでもrequest.route_urlと呼んでいます。私はちょうどHTTPSに私のアプリを切り替え、すべてのリンクはまだHTTPとして出ています。ピラミッドを使用してhttpの代わりにhttpsリンクを吐き出すためにrequest.route_urlを取得するにはどうすればよいですか?

私のアプリケーション全体でこれを変更する設定ファイルに置くことができるグローバル設定がありますか、あるいはこの機能に渡すことができる引数があります。これは、HTTPS URLまたは好ましくは/ /不自然なURL(//)?

答えて

1

route_pathは、/で始まり、スキーム、ドメイン、およびポート(パス)がないURLを返します。それが入ってくるURLがHTTPSでアプリケーションを語っていない場合

http://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.route_path

+1

これは尋ねた正確な問題を解決しますが、それは、それ自体が(クッキーは、セキュリティがチェックされているか、などを設定されているかのように)単にURL世代以外の多くの異なる方法で現れることができ、問題を隠しています。 –

+0

精密度@MichaelMerickel、あなたの答えを投票してくれてありがとう。 –

4

あなたのWSGIサーバーの設定が間違っています。これは、ほとんどの場合、HTTPを使用してWSGIサーバーと通信し、オリジナルの要求がHTTPSであったWSGIサーバーと適切に通信していないリバースプロキシ(nginxなど)の背後にあるためです。

IFすべてがnginx/waitress/gunicorn/...など(プロキシとあなたのwsgiサーバ)で正しく設定されていれば、request.route_urlは正しいURLを発信します。修正はPyramid自体の中にはありません。

問題のドキュメントがあります。ここでの解決方法のいくつかはウェイトレスに特有ですが、その中にはより一般的なもの(プレフィックスミドルウェア)があり、どこでも使えます。 Gunicornと他のWSGIサーバーには、ウェイトレスを使用していない場合には、これを処理する固有の方法があります。

http://docs.pylonsproject.org/projects/waitress/en/latest/#using-behind-a-reverse-proxy

+0

ええ、私のアプリケーションの前で何が起こっているのか分かりません。それはHeroku上で実行されています。私はNginxが関与していないと確信しています。私はウェイトレスが稼働していると確信していますが、WSGIが何をしているのか分かりません。また、問題を修正するために私がおそらく何を変えることができないかもわかりません。 –

+1

その場合、英雄は代理人として行動しています。上記の私のリンクから、何が起きているのかがはっきりしているはずです。あなたのスタックに 'environ ['wsgi.url_scheme'] = 'https'を適切に設定する必要があります。それを達成するための方法はかなりあります。たとえば、すべてのリクエストがsslを超えているという確信がある場合は、iniファイルの '[server:main]'セクションに 'url_scheme = https'を設定してください。 –

関連する問題