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

如何用Python fnmatch实现URL白名单并排除指定路径?

解决URL权限校验中排除特定路径的问题

问题根源

你之前尝试用/auth/[!user-tracking/*]*来排除路径是错误的——fnmatch的[!...]是单个字符的否定匹配,而非对整个路径段的排除。这个模式会要求/auth/后的第一个字符不能是u、s、e等括号内的任意字符,自然会把/auth/signup/google/这类以u开头的子路径也错误排除。

正确解决方案:分开判断允许与排除规则

最清晰可靠的方式是保留原有的允许匹配规则,新增独立的排除列表,通过两层判断实现需求:

1. 配置定义

# 允许的URL模式(保留原有正确配置)
ALLOWED_URL = [
    '/auth/*'
]

# 需要排除的URL模式
EXCLUDED_URL = [
    '/auth/user-tracking/*'  # 排除该路径及其所有子路径
    # 若仅需精确排除单个路径,可改为:'/auth/user-tracking/'
]

2. 权限校验逻辑

from fnmatch import fnmatch

# 先判断是否在允许范围内,再排除指定路径
is_allowed = (
    any(fnmatch(request.path, pattern) for pattern in settings.ALLOWED_URL)
    and not any(fnmatch(request.path, pattern) for pattern in settings.EXCLUDED_URL)
)

方案优势

  • 逻辑清晰:允许规则和排除规则分离,后续新增或修改规则时更易维护
  • 避免误用:无需纠结fnmatch复杂的字符集匹配语法,降低出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:27