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

RewriteRule匹配video/路径时生成空$_GET['id']参数如何解决

Apache mod_rewrite 重写时空ID参数问题修复

问题原因

现有第二条重写规则的捕获组使用[^/]*匹配规则,*限定符代表匹配0次或多次非斜杠字符,因此访问video/路径时,捕获组会匹配到空字符串,自动在查询字符串追加id=,最终PHP端$_GET['id']被赋值为空字符串,导致isset()判断返回true。

修正后的重写规则

直接调整匹配规则的限定符,单独覆盖无ID的带斜杠路径即可,完整规则如下:

RewriteRule ^video/?$ video.php [L]
RewriteRule ^video/([^/]+)/?$ video.php?id=$1 [QSA,NC,L]

改动说明

  • 第一条规则调整为^video/?$,可同时匹配无ID的/video和/video/路径,两种场景都不会自动追加id查询参数,PHP端不会默认生成$_GET['id']变量
  • 第二条规则将捕获组的*限定符替换为+,要求斜杠后必须存在至少1个字符才会触发匹配,仅当路径显式携带ID(如/video/5)时,才会将捕获内容赋值给id参数
  • 保留QSA标记,URL显式传递的参数会被正常保留:比如访问/video/5?source=index时source参数不会丢失,访问/video/?id=2时手动传递的id参数也会正常被PHP识别,完全符合预期。

效果验证

对应不同访问路径的运行结果:

  • 访问/video:进入video.php,不存在$_GET['id']
  • 访问/video/:进入video.php,不存在$_GET['id']
  • 访问/video/5:进入video.php,$_GET['id']值为"5"
  • 访问/video/5?type=flv:进入video.php,$_GET['id']值为"5",$_GET['type']值为"flv"
  • 访问/video/?id=8:进入video.php,$_GET['id']值为"8"(URL显式传参正常生效)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:39:27