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

如何使用RewriteRule将URL中最多3个可选子文件夹重写为查询字符串

适配需求的RewriteRule写法

RewriteRule ^(?:([^/]+)(?:/([^/]+)(?:/([^/]+))?)?)?/*$ player.php?app=$1&stream=$2&mode=$3 [L,QSA]

规则说明

  • 所有非捕获组(带?:前缀的括号)搭配末尾的?实现每一级路径的可选性,兼容从根路径到3级子文件夹的所有场景,不会出现404
  • 每一级参数的捕获规则为[^/]+,天然不会包含斜杠作为参数值,末尾的/*会直接匹配丢弃所有结尾斜杠,不会被捕获进mode参数
  • 保留QSA标志即可自动拼接原有查询字符串,无需手动追加&%{QUERY_STRING},避免空查询字符串时出现多余的&符号

原有规则问题排查

  • 原有规则强制要求路径至少存在2个斜杠分隔的段,所以1级路径和根路径会直接触发404
  • 最后一段捕获规则为(.*)?,会把路径末尾的斜杠也作为内容捕获,导致mode参数携带多余的尾斜杠

测试场景匹配效果

你给出的5个测试URL均可正常匹配,参数输出完全符合要求:

  1. https://wowza.example.com/App/Stream/Mode/?other=stuff → app=App、stream=Stream、mode=Mode、other=stuff
  2. https://wowza.example.com/App/Stream/Mode → app=App、stream=Stream、mode=Mode
  3. https://wowza.example.com/App/Stream/ → app=App、stream=Stream、mode=
  4. https://wowza.example.com/App → app=App、stream=、mode=
  5. https://wowza.example.com → app=、stream=、mode=

可选优化(按需使用)

如果需要跳过真实存在的文件、目录不重写,在规则前添加以下两行即可:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:30:02