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