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

Flask redirect为何将外部URL的&转义为&?如何解决?

Flask重定向后URL中的&被转义为&的原因及解决方法

问题原因

Flask的redirect()函数在返回302重定向响应时,除了设置Location响应头(这里的URL是正确编码的,包含&),还会自动生成一个备用的HTML页面——这个页面是给不自动遵循重定向规则的客户端准备的,其中的跳转链接文本会经过HTML转义处理,所以原始的&会被转换成HTML实体&。

你直接打印link时看到的是未经过转义的原始字符串,而curl默认不自动跟随重定向,所以会显示这个备用HTML页面里的转义后链接。

解决方法

方法1:让客户端自动跟随重定向

正常浏览器会自动读取Location头并跳转,不会看到这个备用HTML页面。如果用curl测试,只需添加-L参数让它跟随重定向:

curl -L https://my.domain.com/endpoint

这样就能直接访问到目标URL,看不到转义后的链接了。

方法2:禁用Flask生成的备用HTML页面

如果你不需要这个备用HTML页面,可以直接返回自定义的Response对象,只设置Location头和状态码,这样就不会生成带转义链接的HTML内容:

from flask import Flask, Response
from urllib.parse import urlencode

app = Flask(__name__)

@app.route('/endpoint')
def redirect_to_external():
    parameters = {'foo': 'bar', 'baz': 'qux'}
    link = 'https://some.domain.com?%s' % urlencode(parameters)
    # 直接返回Response,仅设置重定向头和状态码
    return Response(status=302, headers={'Location': link})

这种方式下,响应中只有状态码和Location头,没有HTML内容,自然不会出现&被转义的问题。

内容的提问来源于stack exchange,提问作者gbrl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:27:37