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

Nginx/htaccess配置问题:无法获取路径后的QueryString参数

解决Apache RewriteRule无法获取QueryString参数的问题

当前你的Rewrite规则虽然用了[QSA]标记,但$1仅匹配URL的路径部分(也就是示例里的path1/path2/path3/page),QueryString并没有被包含到url变量中。QSA的作用只是把原QueryString追加到重写后的URL末尾,而不是合并到url参数里,这就是你拿不到id和do的原因。

解决方案

如果要把完整路径+QueryString都存入url变量,修改Rewrite规则如下:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1%{QUERY_STRING:+?%{QUERY_STRING}} [QSA,L]

代码说明

  • %{QUERY_STRING:+?%{QUERY_STRING}}是条件拼接语法:当URL存在QueryString时,自动添加?并拼接查询字符串;如果没有QueryString,就不添加任何内容,避免生成多余的?。
  • 修改后,$_GET['url']的值会是path1/path2/path3/page?id=15&do=post,同时借助[QSA]标记,$_GET['id']和$_GET['do']也能直接获取到。

补充提示

如果不需要把QueryString放到url变量里,只是想在PHP中获取id和do,其实当前规则已经通过QSA把原参数追加到了重写后的URL中,直接用$_GET['id']和$_GET['do']就能拿到,只是url变量仅包含路径部分。

内容的提问来源于stack exchange,提问作者Erdem KOÇHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:55:57