我通过反向代理服务器将对https://mydomain/subserverA/foo的请求传递给后端服务器A,并且flask应用程序在服务器A上运行。 该URL已在代理服务器上重写,服务器A可以将请求的URL视为https://foo。
因此,当我默认使用烧瓶并使用url_for(“ static”,“ hoge”)函数时,URL变为“ / static / hoge”。我希望该网址为“ / subserverA / static / hoge”。仅使用static_url_path和static_folder选项无法解决此问题。
我通过遵循两个代码解决了这个问题。
代码A
view = Flask(__name__, static_url_path=‘/subdir/static',static_folder='static')
view.add_url_rule('/static/<filename>', 'static')
print(view.url_map)
## Map([<Rule '/subdir/static/<filename>' (GET, HEAD, OPTIONS) -> static>,
## <Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>])
此代码运行良好。但是我不知道这很好。那是因为当“静态”端点具有多个URL路由时,我找不到优先级规则。 (我发现the rule与正常端点有关。)
代码B
view = Flask(__name__)
static_url = Blueprint('static_url', __name__, url_prefix='/subdir/', static_folder='static')
view.register_blueprint(static_url)
此代码使用Blueprint的url前缀。但这使我编写了url_for('static_url.static','foo')。我想用没有反向代理的方式来写。
有人有个好主意吗?