.htaccess根据查询字符串重定向失效问题求助
.htaccess 规则排查与修复方案
常见失效原因
- 未正确匹配
level=image查询参数,匹配逻辑有误 - 未准确验证请求来源,导致内部请求也被错误拦截
- 规则顺序错误,被其他.htaccess规则覆盖
- 服务器未启用mod_rewrite模块
正确规则代码
# 开启URL重写引擎 RewriteEngine On # 拦截外部来源且包含level=image的请求 # 替换your-domain.com为你的归档库实际域名 RewriteCond %{HTTP_REFERER} !^https?://(www\.)?your-domain\.com [NC] # 匹配查询字符串中的level=image参数(任意位置) RewriteCond %{QUERY_STRING} (^|&)level=image(&|$) [NC] # 跳转至指定空白页面,302为临时跳转,测试后可改为301永久跳转 RewriteRule ^a\.php$ https://a.co.uk/blank.htm [R=302,L]
规则说明
RewriteEngine On:必须放在最顶部,开启URL重写功能RewriteCond %{HTTP_REFERER} ...:校验请求来源不是你的域名,NC表示忽略大小写,适配http/https、带/不带www的情况RewriteCond %{QUERY_STRING} ...:精准匹配查询字符串中存在level=image的情况,不管参数在开头、中间还是结尾RewriteRule ...:匹配请求的a.php文件,执行跳转;L表示这条规则执行后不再处理后续规则,避免冲突
额外注意事项
- 务必替换规则中的
your-domain.com为你归档库的实际域名 - 若需拦截无Referer头的爬虫(部分爬虫不会发送Referer),可调整Referer条件为:
# 拦截非本站来源+无Referer的请求 RewriteCond %{HTTP_REFERER} !^https?://(www\.)?your-domain\.com [NC] RewriteCond %{HTTP_REFERER} !^$ [OR] RewriteCond %{HTTP_REFERER} ^$ - 测试时可通过浏览器开发者工具修改Referer,模拟外部请求验证规则是否生效
- 确认服务器已启用mod_rewrite模块,可通过phpinfo()查看或联系主机商确认
内容的提问来源于stack exchange,提问作者Braemoor
相关产品推荐
相关产品推荐

