【问题标题】:How to block referral traffic from multiple referrers and subdomains in .htaccess file?如何在 .htaccess 文件中阻止来自多个引荐来源和子域的引荐流量?
【发布时间】:2015-06-20 07:25:50
【问题描述】:
我每个月都会看到来自俄罗斯和中国的数千个来自以下域的推荐,我尝试将以下代码添加到我的 .htaccess 文件中,然后从我拥有的另一个域中对其进行测试,但我没有t 似乎收到了我期望收到的 403 Forbidden 消息。我错过了什么?
RewriteCond %{HTTP_REFERER} ^(www\.)?([a-z0-9-]+)\.social-buttons\.com$ [NC]
RewriteCond %{HTTP_REFERER} social-buttons\.com [NC]
RewriteCond %{HTTP_REFERER} googlsucks\.com [NC]
RewriteCond %{HTTP_REFERER} 4webmasters\.org [NC]
RewriteCond %{HTTP_REFERER} aliexpress\.com [NC]
RewriteCond %{HTTP_REFERER} best-seo-solution\.com [NC]
RewriteCond %{HTTP_REFERER} best-seo-offer\.com [NC]
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC]
RewriteCond %{HTTP_REFERER} www\.myothertestdomain\.com [NC]
RewriteRule .* - [F]
【问题讨论】:
标签:
apache
.htaccess
spam
referrer
【解决方案1】:
您当前的代码意味着:
If referer is "sociel-buttons.com"
AND
If referer is "googlsucks.com"
AND
etc...
这不是您想要的(总是 false:这就是它永远不会发生的原因)。
相反,您必须使用 OR 标志(您需要 OR 布尔条件)
RewriteCond %{HTTP_REFERER} ^(www\.)?([a-z0-9-]+)\.social-buttons\.com$ [NC,OR]
RewriteCond %{HTTP_REFERER} social-buttons\.com [NC,OR]
RewriteCond %{HTTP_REFERER} googlsucks\.com [NC,OR]
RewriteCond %{HTTP_REFERER} 4webmasters\.org [NC,OR]
RewriteCond %{HTTP_REFERER} aliexpress\.com [NC,OR]
RewriteCond %{HTTP_REFERER} best-seo-solution\.com [NC,OR]
RewriteCond %{HTTP_REFERER} best-seo-offer\.com [NC,OR]
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC,OR]
RewriteCond %{HTTP_REFERER} www\.myothertestdomain\.com [NC]
RewriteRule ^ - [F]
【解决方案2】:
问题不仅在于代码,除了缺少 OR 之外,问题在于您无法使用 .htaccess 文件或至少大部分来自 .htaccess 来阻止垃圾邮件文件。
在您的示例中,唯一会被阻止的是 best-seo 和 buttons-for-website,这两个通过爬虫(机器人)访问您的网站,通常称为 Crawler Referrer Spam
人们感到困惑,并认为.htaccess 规则有效,因为一段时间后他们不再看到垃圾邮件,但事实是大多数推荐人垃圾邮件会出现几天然后消失。
您添加的其余行不会有任何效果。这些使用 Google Analytics(分析)漏洞仅在您的 Google Analytics(分析)中显示。 .htaccess 文件“阻止访问”您的网站,但他们从不访问/访问您的网站。这些通常称为Ghost Referrer Spam。
目前唯一的方法是在 Google Analytics(分析)中制作过滤器,您可以为每个过滤器制作一个过滤器,或者在您的 GA 中制作一个有效主机名过滤器,这样您就不必这样做了担心新的 Ghost Referrer 垃圾邮件。
您可以查看此答案以获取更多详细信息
https://stackoverflow.com/a/28354319/3197362
【解决方案3】:
您应该为除最后一个条件之外的每个条件使用OR 标志:
RewriteCond %{HTTP_REFERER} ^(www\.)?([a-z0-9-]+)\.social-buttons\.com$ [NC,OR]
RewriteCond %{HTTP_REFERER} social-buttons\.com [NC,OR]
RewriteCond %{HTTP_REFERER} googlsucks\.com [NC,OR]
RewriteCond %{HTTP_REFERER} 4webmasters\.org [NC,OR]
RewriteCond %{HTTP_REFERER} aliexpress\.com [NC,OR]
RewriteCond %{HTTP_REFERER} best-seo-solution\.com [NC,OR]
RewriteCond %{HTTP_REFERER} best-seo-offer\.com [NC,OR]
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC,OR]
RewriteCond %{HTTP_REFERER} www\.myothertestdomain\.com [NC]
RewriteRule .* - [F]