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

.htaccess URL重写含?符号的GET参数无法传递问题求助

解决RewriteRule丢失查询字符串的问题

这个问题我之前也踩过类似的坑,核心原因是你的Rewrite规则没有保留原URL里的查询参数(就是?Authority=...&Status=OK这部分)。默认情况下,当RewriteRule的目标地址已经包含查询字符串时,原URL的查询串会被直接覆盖,而不是追加进去。

解决方案:添加QSA标志

你只需要在两个RewriteRule的标志里加上QSA(Query String Append),它的作用就是把原URL的查询参数追加到重写后的查询字符串后面,而不是替换掉。修改后的.htaccess代码如下:

RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/(.*)$ index.php?page=$1&$2=$3 [QSA,NC,L]
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?page=$1 [QSA,NC,L]

为什么这样有效?

当你访问example.com/callback/Data/7dDirSxvHg9h6Z4gHX9oo29SuN8k4dXV?Authority=000000000000000000000000000070816609&Status=OK时:

  • 第一个RewriteRule会匹配这个URL,把它重写成index.php?page=callback&Data=7dDirSxvHg9h6Z4gHX9oo29SuN8k4dXV,然后通过QSA标志,自动把原查询串Authority=xxx&Status=OK追加进去,最终拼接成完整的带所有参数的请求地址
  • 此时你用var_dump($_GET)输出的话,就能看到所有预期的参数了:
    array(4) {
      ["page"]=> string(8) "callback"
      ["Data"]=> string(32) "7dDirSxvHg9h6Z4gHX9oo29SuN8k4dXV"
      ["Authority"]=> string(36) "000000000000000000000000000070816609"
      ["Status"]=> string(2) "OK"
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:58