RewriteRule重写规则配置问题:invalid参数缺失未传入$_GET如何解决
问题根因
你当前的RewriteRule配置存在两个常见错误导致追加的invalid参数无法被正常解析:
- 配置中错误使用了HTML转义符
&作为参数分隔符:Apache的重写规则目标地址的参数直接使用&做分隔即可,转义后的&会被识别为参数内容的一部分,导致invalid参数无法被PHP正常解析为独立的查询参数。 - 缺少必要的规则标志位:未加
L标志的情况下,如果后续还有其他重写规则,当前规则拼接的参数会被后续规则覆盖,导致自定义参数丢失。
修正后的配置
将规则调整为如下写法即可:
RewriteRule ^reset-password/token/([0-9a-zA-Z]+)/invalid reset-password.php?token=$1&invalid [L]
如果你需要保留原请求中携带的其他查询参数,可以在标志位中追加QSA,配置如下:
RewriteRule ^reset-password/token/([0-9a-zA-Z]+)/invalid reset-password.php?token=$1&invalid [L,QSA]
验证方法
配置更新后,你可以在reset-password.php顶部加入如下代码打印完整的查询字符串,确认参数是否正常传入:
var_dump($_SERVER['QUERY_STRING']);
如果输出内容包含invalid,说明配置已经生效。
内容的提问来源于stack exchange,提问作者Nille
相关产品推荐
相关产品推荐

