如何禁止特定URL的请求?

时间:2014-02-03 18:36:54

标签: regex apache url url-rewriting

通过Apache,如果发出特定页面请求www.mysite.com/this_page/,是否可以排除对我网站的访问?引荐来源IP地址发生变化。

我意识到我可以在我的代码中“捕获”这个请求并返回一个错误页面,但我更希望请求永远不会出现在我的实际代码中。我也可以删除该页面,但随后我的网站将返回其“找不到页面”页面。所以,仍然是一个页面。

我的主机是Webfaction,我使用Django。所以这是Apache。

原因是我看到这个特定页面有些奇怪的活动。对于好奇的人来说,我每天要求这个页面大约20次,在2秒钟内连续发出1-3次请求。 IP地址是乌克兰语。推荐人大多是各种乌克兰网站,看似真实,但它们不包含我网页的实际链接。

1 个答案:

答案 0 :(得分:0)

我不认为阻止整个国家是一个好主意,但这是如何做到的。

首先,获取相关国家/地区的CIDR列表。对于大多数国家来说,它将是一个很大的列表。一个地方就是http://www.find-ip-address.org/ip-country/。然后,只需将它们放入.htaccess或Apache配置文件中:

<Location /this_page>
    order allow, deny
    deny from 5.1.0.0/19
    deny from 5.22.156.0/22
    deny from 5.34.176.0/21
    deny from 5.53.112.0/21
    deny from 5.56.24.0/21
    deny from 5.57.64.0/21
    deny from 5.58.0.0/16
    deny from 5.83.16.0/21
    deny from 5.104.32.0/19
    deny from 5.105.0.0/16
    #...
</Location>

(领先的空白是可选的,.htaccess文件如果您乐意阻止整个目录,则不需要位置标记。)

以上配置键在客户端IP上而不是引用链接主机的IP上。这部分要难得多,尽管对乌克兰顶级域名(TLD)的关键也足够了:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https?://[^:/?#]*\.ua[:/?#]
RewriteRule ^/this_page - [F,L]

(注意%{HTTP_REFERER}没有双Rs。规格拼写错误,上面的配置不是。)

如果您因高容量而受到猛烈攻击,您可能需要考虑在防火墙级别而不是Apache上删除连接。同样,这将是客户而不是推荐人。