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

如何全局禁用Flask的尾斜杠308自动重定向?

解决Flask路由斜杠自动重定向及精确匹配问题

看起来你遇到的核心问题是Flask默认的strict_slashes规则导致的自动重定向——它会把不带斜杠的URL(比如DELETE /values)重定向到带斜杠的版本(/values/),这完全不符合你想要的精确路由匹配需求。下面是一套全局生效的解决方案,既能彻底禁用自动重定向,又能完美满足你所有的路由行为要求:

1. 全局禁用自动斜杠重定向

首先在初始化Flask应用时,全局关闭strict_slashes配置,这样Flask会严格区分带斜杠和不带斜杠的URL,不再执行任何自动重定向操作:

from flask import Flask, request

app = Flask(__name__)
# 全局禁用URL斜杠自动重定向,严格匹配带/不带斜杠的URL
app.url_map.strict_slashes = False

2. 保留你的路由定义(无需修改)

你的原有路由结构已经完全符合需求,只需要补充对应的业务逻辑即可:

@app.route('/values', methods=['GET', 'POST'])
def operation_types():
    if request.method == 'GET':
        # 实现列出所有资源的逻辑
        return "List all resources", 200
    elif request.method == 'POST':
        # 实现添加新资源的逻辑
        return "New resource created", 201
    # 理论上不会走到这里,因为methods已经限定了GET/POST
    return '', 405

@app.route('/values/', methods=['GET', 'DELETE', 'PUT'])
@app.route('/values/<code>', methods=['GET', 'DELETE', 'PUT'])
def operation_type_(code: str = ''):
    if request.method == 'GET':
        if code:
            # 实现获取指定code资源的逻辑
            return f"Get resource: {code}", 200
        else:
            # 实现获取空code资源的逻辑
            return "Get resource with empty code", 200
    elif request.method == 'DELETE':
        if code:
            # 实现删除指定code资源的逻辑
            return f"Deleted resource: {code}", 200
        else:
            # 实现删除空code资源的逻辑
            return "Deleted resource with empty code", 200
    elif request.method == 'PUT':
        if code:
            # 实现更新指定code资源的逻辑
            return f"Updated resource: {code}", 201
        else:
            # 实现更新空code资源的逻辑
            return "Updated resource with empty code", 201
    # 不支持的HTTP方法
    return '', 405

3. 自定义错误响应(可选)

如果你想替换Werkzeug默认的异常HTML页面,返回简洁的状态码响应,可以添加全局错误处理函数:

@app.errorhandler(404)
def handle_404(_):
    return '', 404

@app.errorhandler(405)
def handle_405(_):
    return '', 405

验证最终效果

配置完成后,所有请求都会严格匹配你的路由规则:

  • GET /values → 返回200(列出所有资源)
  • POST /values → 返回201(添加新资源)
  • GET /values/123 → 返回200(获取指定code资源)
  • DELETE /values/123 → 返回200(删除指定code资源)
  • PUT /values/123 → 返回201(更新指定code资源)
  • GET /values/ → 返回200(获取空code资源)
  • DELETE /values/ → 返回200(删除空code资源)
  • PUT /values/ → 返回201(更新空code资源)
  • DELETE /values → 返回405(方法不允许,无任何重定向)
  • 不存在的路由(如GET /invalid)→ 返回404

这个方案是全局生效的,不需要逐个路由修改,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:12:45