带URL参数的301重定向无法正常工作问题求助
URL重定向参数丢失问题解决
你的重定向规则写法有误,导致参数被忽略——URL里的查询参数(?后面的内容)不属于路径部分,绝大多数服务器的重定向规则在匹配时只会识别/product/这类路径,不会把?utm_source纳入匹配范围,所以你的规则根本触发不了,自然带不走参数。
重定向本身是支持传递参数的,只要调整规则写法就行,分两种常见服务器环境说明:
Apache(mod_rewrite)
用RewriteRule配合QSA标记自动追加所有查询参数:
RewriteEngine On RewriteRule ^product/$ /product-new/ [R=301,L,QSA]
QSA的作用就是把原URL的所有查询参数(不管是utm_source还是其他)自动拼到目标URL后面。如果只想匹配带utm_source的请求,再加个条件:
RewriteEngine On RewriteCond %{QUERY_STRING} utm_source RewriteRule ^product/$ /product-new/ [R=301,L,QSA]
Nginx
用$args变量携带原查询参数:
rewrite ^/product/$ /product-new/?$args permanent;
要是只想针对带utm_source的请求跳转,就加个判断:
if ($args ~* utm_source) { rewrite ^/product/$ /product-new/?$args permanent; }
关键是要区分URL的路径部分和查询参数部分,规则匹配路径,参数通过专门的标记或变量传递,这样就能按预期跳转了。
内容的提问来源于stack exchange,提问作者public9nf
相关产品推荐
相关产品推荐

