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

Flask URL匹配问题:如何让/api/hello与/api/hello/均生效?

让Flask同时匹配带末尾斜杠和不带斜杠的URL

当然有办法啦!Flask提供了几种简单的方案,能让/api/hello和/api/hello/这两种URL都指向同一个视图函数,下面给你详细说说常用的几种方法:

方案一:全局关闭严格斜杠匹配

如果你希望所有路由都自动支持两种URL形式,不用逐个配置,可以在初始化Flask应用时,全局设置关闭严格斜杠匹配:

from flask import Flask

app = Flask(__name__)
# 全局设置所有路由忽略末尾斜杠的差异
app.url_map.strict_slashes = False

@app.route('/api/hello')
def hello():
    return 'Hello! 不管你用/api/hello还是/api/hello/都能看到我~'

设置后,所有路由都会自动兼容带斜杠和不带斜杠的访问方式,省去了逐个路由调整的麻烦。

方案二:单个路由单独配置

如果只需要特定的几个路由支持两种URL形式,不想修改全局规则,可以在路由装饰器里单独添加strict_slashes=False参数:

from flask import Flask

app = Flask(__name__)

# 仅让这个路由兼容两种URL形式
@app.route('/api/hello', strict_slashes=False)
def hello():
    return 'Hello from either URL!'

这种方式更灵活,只会对当前设置的路由生效,其他路由依然遵循默认的严格匹配规则。

方案三:手动注册两个路由指向同一视图

这种方法更直观,就是给同一个视图函数注册两个不同的路由——一个带末尾斜杠,一个不带:

from flask import Flask

app = Flask(__name__)

# 同时注册两个路由,都指向hello函数
@app.route('/api/hello')
@app.route('/api/hello/')
def hello():
    return 'Hello!'

这种方式的好处是你能清晰看到哪些URL会触发这个视图,适合需要明确控制路由列表的场景。

小补充

默认情况下,Flask的strict_slashes是True:如果你的路由是/api/hello,访问/api/hello/会返回301重定向到不带斜杠的版本;反之如果路由是/api/hello/,访问/api/hello会直接404。而上面的几种方案,要么关闭了严格匹配,要么直接注册了两个路由,就能避免这种情况,让两种URL都能正常返回内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:02:50