如何通过htaccess配置301重定向移除URL末尾所有查询参数
Apache .htaccess删除所有查询参数的301重定向方案
以下是直接可用的完整配置:
RewriteEngine On # 匹配所有存在查询参数的请求 RewriteCond %{QUERY_STRING} .+ # 重定向到同路径,末尾的?作用是丢弃原有查询参数 RewriteRule ^(.*)$ /$1? [R=301,L]
规则逻辑说明
RewriteCond %{QUERY_STRING} .+:判断当前请求的查询字符串(即?之后的内容)长度大于0,只要带有查询参数就触发规则,不限制参数名和内容,适配所有任意参数场景RewriteRule ^(.*)$ /$1?:匹配站点下所有路径的请求,重定向到同路径下,末尾的?是核心配置,作用是告诉Apache丢弃原有请求的查询参数,最终不会在重定向后的地址里保留?及之后的内容- 标志位
R=301表示使用301永久重定向,L表示匹配到该规则后不再执行后续重写规则
注意事项
- 首次测试建议先把
R=301改成R=302,确认重定向逻辑符合预期后再换回301,避免浏览器缓存错误的重定向规则影响测试 - 如果有部分路径(比如API接口、动态页面)需要保留查询参数,可以在规则前加排除规则,例如要排除
/api/开头的路径,可以加一行RewriteCond %{REQUEST_URI} !^/api/ - 确保站点已经开启了
mod_rewrite模块,否则重写规则不会生效
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

