Regex .htaccess:阻止来自我自己域的假引用
我在使用.htaccess时遇到了一个棘手的问题。我有一大堆机器人在我的网站上消耗带宽,这些机器人呈现的是来自我网站的虚假推荐。我在谷歌上搜索过,也在这里查看过,但看不到任何方法可以阻止这一切(这可能就是他们这么做的原因!) 例如,一个机器人发送referer domain.com/accessories/fake_file1,而另一个机器人发送fake referer domain.com/bikes/fake_file2 我知道.htaccess可以通过referer进行阻止,但我发现的所有文档都表明,您只能在每个域的基础上进行阻止,我真的不愿意将我自己的域名作为要阻止的域,因为我确信这会搞砸一些事情 有没有办法做到这一点:Regex .htaccess:阻止来自我自己域的假引用,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我在使用.htaccess时遇到了一个棘手的问题。我有一大堆机器人在我的网站上消耗带宽,这些机器人呈现的是来自我网站的虚假推荐。我在谷歌上搜索过,也在这里查看过,但看不到任何方法可以阻止这一切(这可能就是他们这么做的原因!) 例如,一个机器人发送referer domain.com/accessories/fake_file1,而另一个机器人发送fake referer domain.com/bikes/fake_file2 我知道.htaccess可以通过referer进行阻止,但我发现的所有
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} mydomain\.com\/fake_dir1/ [NC]
RewriteCond %{HTTP_REFERER} mydomain\.com\/fake_dir2/ [NC]
RewriteCond %{HTTP_REFERER} mydomain\.com\/fake_dir3/ [NC]
RewriteRule .* - [F]
提前谢谢 您需要将
[或]
条款作为:
RewriteEngine on
RewriteCond %{HTTP_REFERER} mydomain\.com/fake_dir1/ [NC,OR]
RewriteCond %{HTTP_REFERER} mydomain\.com/fake_dir2/ [NC,OR]
RewriteCond %{HTTP_REFERER} mydomain\.com/fake_dir3/ [NC]
RewriteRule ^ - [F]
或者使用更好的正则表达式:
RewriteCond %{HTTP_REFERER} mydomain\.com/(fake_dir1|fake_dir2|fake_dir3)/ [NC]
RewriteRule ^ - [F]
更新:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "localhost/go/1z67");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'mydomain.com/accessories/water-bottles-and-cages/…');
$html = curl_exec($ch);
curl_close($ch);
var_dump($html);
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /go/1z67
on this server.</p>
</body></html>
403禁止
被禁止的
您没有访问/转到/1z67的权限
在这个服务器上
感谢您的回复-我突然想到,url实际上是这样的:mydomain\.com/fake\u dir1/file\u 1&mydomain\.com/fake\u dir1/file\u 2。如果我加上,正则表达式对那些人不起作用。但它应该起作用吗?e、 g.mydomain\.com/fake_dir1/*?当然这不是问题,你可以在[或]
条件下的每一行使用具有不同URL的规则的第一种形式。是的,你可以使用RewriteCond%{HTTP\u REFERER}mydomain\.com/fake_dir1/
来捕获所有这些情况。我已将此添加到我的.htaccess[code]RewriteCond%{HTTP_REFERER}domain\.com/accessories/*[NC,或]但是,如果我使用包含curl的php脚本访问我的站点上的url,并且referer设置为'domain.com/accessories/shimano-fishing-rod',则不会被阻止-页面仍然显示。如果您提供curl命令,那么我也可以从我的一端测试它,并相应地编辑答案。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /go/1z67
on this server.</p>
</body></html>