如何在Flask中动态传递所有GET参数至目标URL?
解决Flask动态转发所有GET参数到对应外部路径的问题
问题分析
你当前的代码存在两个核心问题:
url_for是用于生成Flask内部路由的工具,无法直接处理外部URL,直接传入"https://myurl.com"会导致端点匹配失败。- 仅配置了根路径
/的路由,无法处理/page、/dance等任意子路径的请求。
解决方案代码
以下代码无需静态配置任何路径,即可自动将所有请求(含任意子路径和GET参数)转发到目标域名的对应路径:
import os from flask import Flask, redirect, request app = Flask(__name__) # 匹配根路径及所有子路径 @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def forward_request(path): # 拼接目标域名与当前请求路径 target_url = f"https://myurl.com{request.path}" # 若存在GET参数,追加到目标URL if request.query_string: target_url += f"?{request.query_string.decode('utf-8')}" # 返回重定向响应,默认302临时重定向,如需永久重定向可加code=301 return redirect(target_url) if __name__ == '__main__': port = int(os.environ.get('PORT', 5000)) app.run(host='0.0.0.0', port=port)
关键说明
- 路由设计:通过
@app.route('/', defaults={'path': ''})和@app.route('/<path:path>')的组合,实现对根路径和所有层级子路径的匹配,<path:path>会完整捕获请求的路径字符串(包含斜杠)。 - 路径与参数传递:
request.path直接获取当前请求的原始路径(如访问/page时,request.path为/page),确保转发后的路径与原请求一致。request.query_string是原请求的GET参数字节串,解码为字符串后直接追加到目标URL,保证所有参数原封不动传递。
- 重定向控制:默认使用302临时重定向,若需永久重定向,可修改
redirect(target_url)为redirect(target_url, code=301)。
内容的提问来源于stack exchange,提问作者Jon Snow
相关产品推荐
相关产品推荐

