我在使用 .htaccess 时遇到了一个棘手的问题。我的网站上有一大堆机器人正在耗尽带宽,这些机器人提供的虚假引荐来源似乎来 self 的网站。我用谷歌搜索过,也看过这里,但找不到任何方法来阻止这种情况(这可能就是他们这样做的原因!)
例如,一个机器人发送引荐来源网址domain.com/accessories/fake_file1,而另一个机器人发送假引荐来源网址domain.com/bikes/fake_file2。
我知道 .htaccess 可用于通过引用来阻止,但我发现的所有文档都表明您只能在每个域的基础上进行阻止,而且我真的不愿意将自己的域名作为要阻止的域,因为我确信这会搞砸一些事情!
有没有办法做这样的事情:
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]
提前致谢!
最佳答案
您需要将 [OR]
子句设置为:
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 代码:
<?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); ?>
我的
DOCUMENT_ROOT/.htaccess
文件中的这条规则:RewriteEngine on RewriteCond %{HTTP_REFERER} mydomain\.com/accessories/ [NC] RewriteRule ^ - [F]
然后当我运行那个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>
关于regex - .htaccess:阻止来 self 自己的域的虚假引荐来源网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403252/