我使用以下.htaccess代码阻止了一些垃圾邮件引用者:
RewriteCond %{HTTP_REFERER} \.ru$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ru/ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua/ [NC,OR] RewriteCond %{HTTP_REFERER} hol\.es [NC,OR] RewriteCond %{HTTP_REFERER} hys\.cz [NC,OR] A few more similar lines RewriteCond %{HTTP_REFERER} slinqs\.com [NC] RewriteRule ^(.*)$ - [F,L]
正如你所看到的,我使用代码阻止了所有的.ru和所有的.ua域名。
问题是现在我想允许一个特定的.ua域发送stream量到我的网站。
我如何将一个.ua域名列入白名单?
可能吗?
为了允许allowed-domain.com你可以做如下的事情:
RewriteCond %{HTTP_REFERER} !allowed-domain\.ua RewriteCond %{HTTP_REFERER} \.ru$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ru/ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua/ [NC,OR] RewriteCond %{HTTP_REFERER} hol\.es [NC,OR] RewriteCond %{HTTP_REFERER} hys\.cz [NC,OR] # A few more similar lines RewriteCond %{HTTP_REFERER} slinqs\.com [NC] RewriteRule ^ - [F]
那! 前缀否定了正则expression式,如果没有OR标志,它就是一个隐含的AND。 所以,上面说的是,如果HTTP_REFERER不包含allowed-domain.ua并且包含.ru或者.ua等,那么返回一个403 Forbidden。
使用F标志时,不需要L标志(暗示)。 此外,你不需要捕获子模式(即。 (.*) ) – 因为你没有使用它。
RewriteCond %{HTTP_REFERER} \.ru$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ru/ [NC,OR]
请注意,这与(使用replace)相同:
RewriteCond %{HTTP_REFERER} \.ru(/|$) [NC,OR]
RewriteCond %{HTTP_REFERER} \.ru$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ru/ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua$ [NC,OR] RewriteCond %{HTTP_REFERER} \.ua/ [NC,OR]
所以这是一样的:
RewriteCond %{HTTP_REFERER} \.(ru|ua)(/|$) [NC,OR]