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

如何编写ModRewrite规则,判断选择器是否存在以正确重写URL?

URL重写规则优化:区分有无选择器的场景

需求说明

  • 无选择器URI:/feeds/mydata.json → 重写为 /content/feeds/mydata/app.json
  • 单选择器URI:/feeds/mydata.sale.json → 重写为 /content/feeds/mydata/app.sale.json
  • 多选择器URI:/feeds/mydata.sale.big.json → 重写为 /content/feeds/mydata/app.sale.big.json

现有规则问题

你当前的第一条规则^/feeds/([^.]*).(.*).json会错误匹配无选择器的场景:([^.]*)匹配mydata,(.*)匹配空字符串,最终生成错误路径/feeds/mydata/app..json。

解决方案

方案1:调整正则表达式(推荐)

修改第一条规则的正则,确保选择器部分(第二个捕获组)至少包含一个字符,避免匹配无选择器的请求:

# 处理带选择器的场景(单个或多个选择器)
RewriteRule ^/feeds/([^.]+)\.([^.]+.*)\.json$ /content/feeds/$1/app.$2.json [PT,L]

# 处理无选择器的场景
RewriteRule ^/feeds/([^.]+)\.json$ /content/feeds/$1/app.json [PT,L]
  • [^.]+:确保基础名称(如mydata)不包含点,避免匹配混乱;
  • [^.]+.*:保证选择器部分至少有一个字符,覆盖单选择器和多选择器的情况。

方案2:使用RewriteCond做条件判断

通过条件检查URI中是否存在额外的点(除了.json的点),再应用对应规则:

# 仅当URI包含至少两个点时(即存在选择器),应用此规则
RewriteCond %{REQUEST_URI} ^/feeds/[^.]+\.[^.]+\.json$
RewriteRule ^/feeds/([^.]*)\.(.*)\.json$ /content/feeds/$1/app.$2.json [PT,L]

# 处理无选择器的场景
RewriteRule ^/feeds/(.*)\.json$ /content/feeds/$1/app.json [PT,L]

RewriteCond的正则^/feeds/[^.]+\.[^.]+\.json$确保URI中除了最后的.json外,还有至少一个其他的点,精准过滤出带选择器的请求。


内容的提问来源于stack exchange,提问作者Vishal--JAVA--CQ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:18:26