如何用.htaccess将查询字符串转为SEO友好URL且保留其余查询参数
问题解决方法
问题根源
- 默认情况下Apache的
RewriteRule在重写时会用规则内定义的查询参数覆盖原URL携带的查询参数,你当前规则没有开启查询参数追加配置,因此原URL里的search参数在重写后被丢弃,PHP自然无法获取。
解决方案
在你的重写规则标记位增加QSA(Query String Append,查询字符串追加)标记即可,修改后的完整.htaccess代码如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+)$ product.php?slug=$1 [QSA,NC,L]
补充说明
- 如果你的
.htaccess文件放在网站根目录而非products子目录下,需要调整重写规则匹配路径,写法如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^products/([^/\.]+)$ /products/product.php?slug=$1 [QSA,NC,L]
- 修改完成后刷新页面即可生效,此时再访问
domain.com/products/product-name?search=test,就能在PHP中正常获取$_GET['search']参数。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

