.htaccess代码来阻止所有的.ua域名,但白名单一个特定的域名

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