如何使用Flask将子域添加到Google App Engine并在站点和子域中显示不同的内容?

时间:2018-03-09 01:17:17

标签: google-app-engine flask

我们有一个使用Google App Engine与Flask开发的网站。所以我们有裸域mysite.com(重定向到www.mysite.com)和子域名www.mysite.com

现在我们要添加另一个子域user.mysite.com,因此我们将其添加到App Engine自定义域和注册商,没有任何问题。

但是我们在user.mysite.com上看到了同一个网站的副本www.mysite.com(所有相同的页面,只是子域用户而不是www。)!

我们如何在user.mysite.com上显示另一个页面(如Hello world!),与www.mysite.com上的页面不同?

2 个答案:

答案 0 :(得分:1)

您所询问的内容是内置于Flask中的Blueprints

http://flask.pocoo.org/docs/0.12/blueprints/

这很好地解释了子域名的Blueprint设置:

http://exploreflask.com/en/latest/blueprints.html

对于一些简单的情况,您可以只测试request。 Flask也有内置功能:

@app.before_request
def check_subdomain():
    '''
    This runs before all requests
    '''
    if "user." in request.environ.get('HTTP_HOST'):
        SOME_GLOBAL = 'user'
        return None

但是,听起来你想要使用Blueprints。这是一个非常优雅的解决方案。

答案 1 :(得分:0)

可能的解决方案是部署dispatch.yaml文件,如this doc中所述。通过这种方式,您可以根据URL中的主机名将请求到您的子域路由到特定服务。

对于您的具体情况,这可能是dispatch.yaml文件:

dispatch:
  # For www. subdomain.
  - url: "www.mysite.com/"
    service: [www-subdomain-frontend-service]

  # For user. subdomain.
  - url: "user.mysite.com/"
    service: [user-subdomain-frontend-service]