Python Flask应用点击跳转链接报404无法触发重定向问题求助
问题原因与解决步骤
核心错误出在路由规则定义、参数匹配逻辑两个环节,按以下步骤修改即可:
- 原路由规则存在多余的双引号,和实际请求路径不匹配
- URL路径参数未指定
path转换器,无法匹配带斜杠的外部URL - 模板中href属性未加引号,特殊场景会导致链接生成截断
具体修改方案
1. 修正后端路由规则
@app.route('/redirect/<path:url>') def go_to_reddit(url): print("Redirecting to ", url) # 可选:增加URL合法性校验,避免开放重定向漏洞 if not url.startswith(('http://', 'https://')): url = 'https://' + url return redirect(url)
修改说明:
去掉路由规则里多余的双引号,给url参数增加path前缀,这样参数内容里的斜杠会被识别为URL的一部分,不会被当成路由层级分隔符。
2. 修正模板链接写法
给href属性值增加双引号,避免链接因特殊字符截断:
<ul> {% for post in posts %} <li><a href="{{url_for('go_to_reddit', url=post.url)}}">{{ post.title }}</a></li> {% endfor %} </ul>
3. 可选排查验证步骤
如果修改后仍存在问题,可按以下逻辑定位:
- 开启Flask调试模式,查看404日志里的实际请求路径,对比是否和路由规则匹配
- 在模板中打印
{{url_for('go_to_reddit', url=post.url)}}的输出,确认生成路径格式是否符合预期 - 检查是否有其他优先级更高的路由提前匹配了当前请求路径
内容的提问来源于stack exchange,提问作者Relatively_Kline
相关产品推荐
相关产品推荐

