在谷歌应用程序引擎中使用子域
-
10-07-2019 - |
题
我如何使用谷歌应用程序引擎(python)中的子域。
我想获得第一个域部分并采取一些操作(处理程序)。
例子:
Product.example.com -> 将其发送给产品处理程序
user.example.com -> 将其发送给用户处理程序
实际上,使用虚拟路径我有这样的代码:
application = webapp.WSGIApplication(
[('/', IndexHandler),
('/product/(.*)', ProductHandler),
('/user/(.*)', UserHandler)
]
解决方案
WSGIApplication 无法基于域进行路由。相反,您需要为每个子域创建一个单独的应用程序,如下所示:
applications = {
'product.example.com': webapp.WSGIApplication([
('/', IndexHandler),
('/(.*)', ProductHandler)]),
'user.example.com': webapp.WSGIApplication([
('/', IndexHandler),
('/(.*)', UserHandler)]),
}
def main():
run_wsgi_app(applications[os.environ['HTTP_HOST']])
if __name__ == '__main__':
main()
或者,您可以编写自己的 WSGIApplication 子类,它知道如何处理多个主机。
其他提示
我喜欢尼克的想法,但我有一个稍微不同的问题。我想匹配一个特定的子域来处理它有点不同,但所有其他子域应该以相同的方式处理。这是我的例子。
import os
def main():
if (os.environ['HTTP_HOST'] == "sub.example.com"):
application = webapp.WSGIApplication([('/(.*)', OtherMainHandler)], debug=True)
else:
application = webapp.WSGIApplication([('/', MainHandler),], debug=True)
run_wsgi_app(application)
if __name__ == '__main__':
main()
不隶属于 StackOverflow