想让 api.example.com 和 ann.example.com 走不同的路由,Flask 怎么配?本地怎么测?哪些坑会让子域名规则静默失效?这篇用 test client 与真实 gunicorn 都跑一遍。
规则: [('/', 'www_index', ''), ('/', 'api_index', 'api'), ('/', 'user_index', '<user>')]
Host example.test → www 首页
Host www.example.test → www 首页
Host api.example.test → www 首页
Host ann.example.test → www 首页
Host a.b.example.test → www 首页
Host other.test → www 首页
Host localhost → www 首页上一篇:Blueprint 的静态文件和模板目录;下一篇:URL 中的 Unicode 与编码;Host 头校验见Host Header 校验。
Host example.test → www 首页 Host www.example.test → www 首页 Host api.example.test → www 首页 Host ann.example.test → www 首页 Host a.b.example.test → www 首页 Host other.test → www 首页 Host localhost → www 首页
Host example.test → www 首页 Host www.example.test → 用户 www 的站点 Host api.example.test → api 首页 Host ann.example.test → 用户 ann 的站点 Host a.b.example.test → 用户 a.b 的站点 Host other.test → 用户 <invalid> 的站点 Host localhost → 用户 <invalid> 的站点 警告(UserWarning): ["Current server name 'localhost' doesn't match configured server name 'example.test'", "Current server name 'other.test' doesn't match configured server name 'example.test'"]
Host example.test:8000 → 主域 Host api.example.test:8000 → api 子域 Host api.example.test → 404 Host api.example.test:9999 → 404
url_for("api_index") → http://api.example.test:5000/ | url_for("user_index", user="ann") → http://ann.example.test:5000/ | url_for("www_index") → / | _external → http://example.test:5000/Host: example.test:9601 → 200 www 首页 Host: api.example.test:9601 → 200 api 首页 Host: ann.example.test:9601 → 200 用户 ann Host: example.test → 200 用户 <invalid> Host: evil.test:9601 → 200 用户 <invalid>
默认: session=eyJ4IjoxfQ.ar8hhw._ribnK42gL9L4gQ4xurNzN7TY6I; HttpOnly; Path=/ SESSION_COOKIE_DOMAIN=".example.test": session=eyJ4IjoxfQ.ar8hhw._ribnK42gL9L4gQ4xurNzN7TY6I; Domain=example.test; HttpOnly; Path=/