如何修复.htaccess重定向中查询参数被忽略的问题?
问题原因及修复方案
你的.htaccess规则里,当访问带额外查询参数的URL时,比如shop.php?page=home&search=foo,search参数被忽略的核心原因是RewriteRule默认会用新的查询字符串替换掉原有的。
你当前的规则:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^shop/(.*)$ /shop.php?page=$1 [L]
这里的[L]标记只是终止后续规则处理,但不会保留原查询参数。当原URL带有search=foo这类额外参数时,重写后只会保留你指定的page=$1,原参数会被覆盖丢弃。
要解决这个问题,只需要在RewriteRule的标记里加上QSA(Query String Append),它的作用是把原URL的查询字符串追加到新生成的查询字符串后面,这样两个参数就能共存了。
修改后的规则:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^shop/(.*)$ /shop.php?page=$1 [L,QSA]
这样访问类似shop/home?search=foo的URL时,就会被正确重写为shop.php?page=home&search=foo,所有参数都能保留。
内容的提问来源于stack exchange,提问作者Youri
相关产品推荐
相关产品推荐

