如何编写自定义URI正则表达式实现站点内容访问限制
自定义URI正则访问管控实现方案
规则逻辑前置说明
两类URI的判定边界清晰,配置时按照「白名单优先放行、剩余路径匹配拦截」的顺序执行即可,核心是通过负向预查排除白名单路径,避免误拦截:
- 放行范围:
/item/page/路径下携带wpv_view_count=258参数的分页地址 - 拦截范围:
/item/路径下除上述分页路径外的所有具体内容条目地址
待拦截内容URI匹配正则
根据你使用的管控组件不同,分两个常用版本:
路径匹配版本(适配Nginx、APISIX、大部分WAF/网关组件,匹配域名后、查询参数前的路径部分)
^/item/(?!page/)[a-z0-9]+-[a-z0-9-]+/?$
正则各段作用:
^/item/:锁定路径起始为/item/,只对该路径下的地址做匹配(?!page/):负向先行断言,直接排除/item/page/开头的分页路径,从匹配逻辑上避免误拦白名单地址[a-z0-9]+-[a-z0-9-]+:匹配你给出的内容条目slug格式,即「字母+数字的内容类型ID + 连字符 + 字母/数字/连字符组成的内容名」结构,覆盖snv、sa、aud开头的所有内容条目/?$:兼容路径末尾带/和不带/的两种常见地址格式
完整URI匹配版本(适配需要匹配全链路地址的管控场景,兼容内容页携带任意查询参数的情况)
^https://example\.com/item/(?!page/)[a-z0-9]+-[a-z0-9-]+/?(\?.*)?$
这个版本在路径匹配的基础上,补充了域名固定匹配,以及末尾可选的查询参数匹配,只要是/item下的非分页内容条目,不管携带什么查询参数都会被命中拦截。
白名单放行匹配正则
用来优先匹配允许访问的分页地址,路径版本如下:
^/item/page/\d+/?\?.*wpv_view_count=258.*$
该正则不限制wpv_view_count=258在查询串中的位置,不管参数顺序怎么变都能正常命中放行。
配置注意事项
- 必须把白名单规则的执行优先级调到黑名单规则前面,命中白名单的地址直接放行,不再执行后续拦截逻辑
- 如果后续/item路径下新增了其他不需要拦截的子路径,比如分类页
/item/category/,只需要修改正则里的负向预查段为(?!page/|category/)即可追加排除 - 正式上线前建议把你列出的2个白名单地址、3个待拦截地址全部放到正则测试工具里校验,确认命中结果符合预期再切流量。
内容的提问来源于stack exchange,提问作者Martha
相关产品推荐
相关产品推荐

