如何通过htaccess Rewrite规则配置拦截爬虫访问店铺搜索页
符合需求的.htaccess重写规则
直接使用以下规则即可满足所有要求:
# 自定义503错误返回内容 ErrorDocument 503 "Site temporarily disabled for crawling" RewriteEngine On # 拦截符合条件的爬虫访问搜索页 RewriteCond %{HTTP_USER_AGENT} bots [NC] RewriteCond %{QUERY_STRING} (^|&)s=[^&]+(&|$) RewriteCond %{REQUEST_URI} !^/robots\.txt$ RewriteRule ^shop\/?$ - [R=503,L]
规则说明
RewriteCond %{HTTP_USER_AGENT} bots [NC]:匹配UA包含bots字符串的请求,不区分大小写,沿用你已验证生效的逻辑RewriteCond %{QUERY_STRING} (^|&)s=[^&]+(&|$):校验查询字符串中存在非空值的s参数,[^&]+保证s参数值至少有1个字符,避免匹配s=空值场景RewriteCond %{REQUEST_URI} !^/robots\.txt$:排除对robots.txt的拦截,不需要该逻辑可直接删除本行RewriteRule ^shop\/?$ - [R=503,L]:同时匹配/shop和/shop/两种路径格式,-表示无需修改请求路径,直接返回503状态码,L标记表示命中规则后终止后续重写逻辑,避免规则冲突
原规则问题梳理
你之前编写的规则存在两处逻辑偏差:
- 查询字符串条件写反:原规则
RewriteCond %{QUERY_STRING} !(^|&)s=*表示拦截不存在s参数的请求,和你需要拦截带s参数的需求刚好相反 - 路径匹配逻辑不全:原规则
RewriteRule ^shop$ ./$1 [R=503,L]只能匹配/shop路径,无法匹配带末尾斜杠的/shop/,同时目标地址./$1没有实际意义,直接用-返回状态码即可
内容的提问来源于stack exchange,提问作者Deepak Kamat
相关产品推荐
相关产品推荐

