.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
相关产品推荐
相关产品推荐

