基于来源URL字符串的.htaccess重定向配置求助
解决POST请求基于Referrer参数的307重定向问题
首先,你遇到的500错误是因为原来的RewriteCond正则语法有误(括号不匹配、通配符使用错误),而且规则没有精准匹配你的实际场景(没有限定POST请求和目标路径)。下面是符合你需求的正确规则:
RewriteEngine On # 匹配POST请求到/products页面,且Referrer包含bikes=1参数 RewriteCond %{REQUEST_METHOD} ^POST$ [NC] RewriteCond %{REQUEST_URI} ^/products$ [NC] RewriteCond %{HTTP_REFERER} ^https://referrer\.com/.*\?bikes=1 [NC,OR] RewriteCond %{HTTP_REFERER} ^https://referrer\.com/.*&bikes=1 [NC] RewriteRule ^ /bikes [R=307,L]
规则细节解释:
RewriteCond %{REQUEST_METHOD} ^POST$ [NC]:限定只处理POST请求,确保GET请求不受影响,[NC]表示不区分大小写(虽然POST本身大小写不敏感,但加上更稳妥)。RewriteCond %{REQUEST_URI} ^/products$ [NC]:只匹配请求路径为/products的请求,避免全站规则误触发。- 两个Referrer条件:分别匹配
bikes=1作为URL参数中的第一个参数(?bikes=1)或后续参数(&bikes=1),确保覆盖所有可能的参数位置,[NC]同样是不区分大小写,[OR]表示两个条件满足其一即可。 RewriteRule ^ /bikes [R=307,L]:R=307是关键,它会告诉浏览器保留原请求方法(POST)和请求数据跳转到目标页面;L表示这是最后一条规则,匹配后不再处理后续规则。
为什么原来的规则会报错?
你之前的RewriteCond %{HTTP_REFERER} ^(.*)\.referrer\.(.*)\(*bikes*) [NC]存在语法错误:
- 括号不匹配:
\(*bikes*)里的\(是转义的左括号,但后面的*)没有正确闭合,正则引擎无法解析,直接导致500内部服务器错误。 - 没有限定请求方法和路径,会把所有来自referrer.com且包含bikes的请求都重定向,范围太广不符合你的需求。
内容的提问来源于stack exchange,提问作者Huskie69
相关产品推荐
相关产品推荐

