.htaccess 代码用于阻止所有 .ua 域名但将特定域名列入白名单

.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域向我的网站发送流量。

我怎样才能将该.ua域名列入白名单?

是否可以?

答案1

为了允许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]

前缀!否定正则表达式,如果没有标志,则OR它是隐式 AND。因此,上面的代码表明,如果 HTTP_REFERER 不包含allowed-domain.ua且包含.ru.ua等,则返回 403 Forbidden。

L使用标志时不需要该标志F(这是隐含的)。此外,您不需要捕获子模式(即(.*))- 因为您没有使用它。

RewriteCond %{HTTP_REFERER} \.ru$ [NC,OR]
RewriteCond %{HTTP_REFERER} \.ru/ [NC,OR]

请注意,这与(使用交替)相同:

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]

相关内容