【问题标题】:Routes With Custom Domains Using Flask使用 Flask 的带有自定义域的路由
【发布时间】:2013-11-06 04:05:43
【问题描述】:

我的网络应用程序为用户分配了一个子域,并且可以选择允许他们使用自定义域。除非用户访问其自定义域以获取不包含尾部斜杠的路由,否则此方法有效。

对此 url 的 GET 请求按预期工作:http://user.example.com:5000/book/12345/

对此 url 的 GET 请求按预期工作:http://custom.com:5000/book/12345/

对此 url 的 GET 请求尝试重定向,但失败:http://custom.com:5000/book/12345

Flask 最终将浏览器重定向到这个 url,当然,这不起作用:http://<invalid>.example.com:5000/book/12345/

我应该以不同的方式处理自定义域吗?这是一个完整的最小示例来重现这一点。我设置了custom.com,example.com。和 user.example.com 在我的开发环境中指向我的 /etc/hosts 文件中的 127.0.0.1,以便 Flask 接收请求。

from flask import Flask

app = Flask(__name__)

server = app.config['SERVER_NAME'] = 'example.com:5000'

@app.route('/', subdomain="<subdomain>")
@app.route('/')
def index(subdomain=None):

    return ("index")

@app.route('/book/<book_id>/', subdomain="<subdomain>")
@app.route('/book/<book_id>/')
def posts(post_id, subdomain=None):

    return (book_id)


if __name__ == '__main__':
    app.run(host='example.com', debug=True)

【问题讨论】:

    标签: python flask subdomain werkzeug


    【解决方案1】:

    我不确定这是否可能。主机匹配和子域匹配是mutually exclusive(看主机匹配参数)。

    不过我很愿意犯错。

    我能想到的解决这个问题的一种方法是在 Flask(比如 nginx)前面使用一些东西,将 custom.com 指向 custom.com._custom.example.com 或类似的东西。在您的代码中,您可以创建一个自定义 url_for 函数,该函数将其识别为自定义域。我会在 Flask mailing list 上提问,因为他们会给你一个可靠的答案。

    【讨论】:

    • 这是个好建议。我刚刚通过电子邮件发送了 Flask 列表。谢谢。
    • 请告诉我们您得到的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多