原始的問題如何使用WSGI從HTTP重新路由用戶到HTTPS
的App Engine SDK 1.6.5
的Python 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')
該作品,但似乎應該有更好的方法來做到這一點。就像在Apache Web服務器上使用htaccess一樣。這太像我喜歡的黑客了。我真的不喜歡我的代碼中的硬編碼網址。更不用說它是2個登錄請求並不是什麼大問題,但也可能有其他的例子,最終花費太多。
注意1:如果您正在查看此解決方案,請注意,使用HTTPS方案還意味着您將無法使用開發控制檯而不刪除SCHEME或配置您爲dev設置的變量。
注2:我是能夠得到一個程序化的方式服務HTTPS而不是HTTP。我在下面的評論正確的軌道上,但它需要一個論點。
webapp2.uri_for('login', _scheme='https')
這會給你正確的https://someapp.appspot.com/login url。不幸的是,我不關心如何處理用戶在不使用https的情況下將地址欄輸入到地址欄中的主要問題,並且在我使用上面的黑客攻擊時收到錯誤。所以我仍然在尋找WSGI的方式來將收入請求路由到HTPPS。
編輯:添加註1和澄清的標題,我認爲這是顯而易見的是,我使用WSGI從源而不是CGI。
雖然這是使用'webapp2.uri_for('login')的一個側面問題'也不會生成https作爲URL。因此,我仍然試圖解決所有問題。如果用戶沒有在HTTP中啓動https App Engine插件,並且在/ login上發生錯誤,因爲它仍然是http,除非我硬編碼鏈接或使用我的上面的黑客。 –
如何做一個字符串替換用https替換http?這不是最好的解決方案,但至少你不需要對整個URL進行硬編碼 – Dhara
無論你接受還是不接受,請將你的問題的答案作爲答案發布(你可以接受你自己的答案,特別是而不是錯誤的答案,正如你在下面的評論中所建議的那樣)。 – Bruno