本文介绍如何在 flask 中优雅地捕获除 `/static` 资源外的所有请求路径,避免覆盖内置静态文件服务,推荐使用 `@app.errorhandler(404)` 替代通配符路由实现安全、可靠的兜底逻辑。
在 Flask 中,开发者有时希望为“几乎所有页面”提供统一的后端处理逻辑(例如前端单页应用的客户端路由),但又必须确保 /static/ 下的 CSS、JS、图片等静态资源能被 Flask 默认的静态文件处理器正常响应。若直接使用通配符路由如 @app.route(‘/’),它会优先匹配所有路径(包括 `/static/)**,从而劫持原本应由 Flask 内置静态视图(send_static_file`)处理的请求,导致静态文件 404 或返回错误内容。
✅ 正确做法:不注册通配符路由,而是利用 404 错误处理器
Flask 的静态文件服务(默认挂载在 /static)具有高优先级且自动生效;只有当请求路径未被任何显式路由匹配,且静态文件也不存在时,才会触发 404 Not Found。因此,我们只需在 404 处理器中判断:若请求路径以 /static/ 开头,则不应干预(让其自然返回 404,或可选择重定向/忽略);否则,按需处理——这正是安全兜底的核心逻辑。
以下是推荐实现: