.htaccess跳转第三方站点时无法携带URL参数该如何解决?
原有配置错误说明
- 重写条件的正则匹配逻辑错误:
^code=[NS]$仅能匹配查询字符串严格等于code=N或者code=S的情况,无法匹配任意值的code参数 - RewriteRule规则格式错误:规则第一个参数用于匹配当前站点的请求路径,你填写的第三方域名完全不符合匹配逻辑
- 未明确指定跳转目标域名,也没有配置参数传递的相关标识
可行配置方案
场景1:跳转时保留所有原始URL参数
如果需要将source.example下所有携带code参数的请求,全部跳转到target.example的对应路径,同时保留所有原始查询参数,使用以下配置:
RewriteEngine On # 匹配当前访问的是源站域名 source.example,NC表示不区分大小写 RewriteCond %{HTTP_HOST} ^source\.example$ [NC] # 匹配查询字符串中存在code参数,不限参数位置 RewriteCond %{QUERY_STRING} (^|&)code= [NC] # QSA标识会自动追加原始查询参数到目标URL,R=302为临时跳转,L表示匹配到后结束当前规则 RewriteRule ^(.*)$ https://target.example/$1 [R=302,L,QSA]
如果仅需要跳转源站根路径的请求,把最后一行规则替换为:RewriteRule ^$ https://target.example/ [R=302,L,QSA]
场景2:跳转时仅保留code参数
如果不需要保留除code之外的其他查询参数,使用捕获规则实现:
RewriteEngine On RewriteCond %{HTTP_HOST} ^source\.example$ [NC] # 捕获code参数的值到分组%2 RewriteCond %{QUERY_STRING} (^|&)code=([^&]+) [NC] RewriteRule ^(.*)$ https://target.example/$1?code=%2 [R=302,L]
配置修改完成后,清空浏览器缓存再测试即可生效。
内容的提问来源于stack exchange,提问作者Luka Savic
相关产品推荐
相关产品推荐

