Я блокирую некоторые источники спама, используя следующие .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
домен?
Является ли это возможным?
Чтобы разрешить 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
флаг это неявное И. Итак, выше указано, что если 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]