如何编写mod_rewrite规则捕获美化URL中的查询参数?
解决.htaccess美化URL中查询参数的传递问题
嘿,这个问题其实超简单,只需要给你的Rewrite规则加上**QSA(Query String Append)**标记就能搞定!
原理说明
默认情况下,Apache的RewriteRule如果在目标URL里指定了查询参数,会直接替换掉原URL的查询字符串。而QSA标记的作用就是告诉服务器:把原URL里的查询参数追加到目标URL的查询参数后面,而不是替换掉。正好匹配你需要保留filter=filter_val这类参数的需求。
修改后的完整规则
把你现有的两条规则加上QSA标记就行:
# 处理 /v1/resource/ 及带查询参数的情况 RewriteRule ^/(v[0-9]+)/(resource)/?$ /$1/file.php?resource=$2 [NC,L,QSA] # 处理 /v1/resource/resource_id/ 及带查询参数的情况 RewriteRule ^/(v[0-9]+)/(resource)/([A-z0-9_]+)/?$ /$1/file.php?resource=$2&resource_id=$3 [NC,L,QSA]
效果验证
- 当访问
/v1/resource/?filter=filter_val时,会被重写为/v1/file.php?resource=resource&filter=filter_val - 当访问
/v1/resource/abc_123/?sort=desc&page=2时,会被重写为/v1/file.php?resource=resource&resource_id=abc_123&sort=desc&page=2
小提示
确保你的Apache服务器已经启用了mod_rewrite模块,并且你的.htaccess文件所在目录的AllowOverride配置已经开启(比如设置为AllowOverride All),这样规则才能正常生效。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

