代码之家  ›  专栏  ›  技术社区  ›  Zote

在谷歌应用引擎中使用子域

  •  19
  • Zote  · 技术社区  · 15 年前

    如何在谷歌应用引擎(python)中使用子域。

    我想得到第一个域部分并采取一些行动(处理程序)。

    例子:
    product.example.com->将其发送到产品处理程序
    user.example.com->发送给用户处理程序

    实际上,使用虚拟路径,我有以下代码:

      application = webapp.WSGIApplication(
        [('/', IndexHandler),
         ('/product/(.*)', ProductHandler),
         ('/user/(.*)', UserHandler)
      ]
    
    2 回复  |  直到 7 年前
        1
  •  26
  •   Nick Johnson    15 年前

    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子类,它知道如何处理多个主机。

        2
  •  2
  •   mindlesstux    14 年前

    我喜欢尼克的想法,但我有一个稍微不同的问题。我想匹配一个特定的子域来处理它,但所有其他子域都应该处理相同的问题。下面是我的例子。

    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()