regex - .htaccess:阻止来 self 自己的域的虚假引荐来源网址

标签 regex apache .htaccess mod-rewrite

我在使用 .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]

更新:

  1. 为了测试此规则,我创建了以下 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);
    ?> 
    
  2. 我的 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/

相关文章:

Android 使用 org.apache.http.legacy 设置 cookie

php - 在友好 URL 的上下文中处理损坏的图像

javascript - 是否存在 "[^xy]"不等于 "(?!x|y)."的情况?

javascript - 如何测试字符串是否包含无效的字符串文字?

apache - htaccess的绝对路径

wordpress - 301重定向重定向不是指定的链接

internet-explorer - 使用 307 重定向 IE 中的发布请求

php - 将PCRE正则表达式转换为mysql查询正则表达式

php - 如果 <br/> 之前或之后没有文本,我如何删除它? DOMxpath 还是正则表达式?

php - 如何从 Web 浏览器获取唯一的 PC ID