You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中动态传递所有GET参数至目标URL?

解决Flask动态转发所有GET参数到对应外部路径的问题

问题分析

你当前的代码存在两个核心问题:

  1. url_for是用于生成Flask内部路由的工具,无法直接处理外部URL,直接传入"https://myurl.com"会导致端点匹配失败。
  2. 仅配置了根路径/的路由,无法处理/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:46:30