Я блокирую некоторые источники спама, используя следующий код .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
является неявным AND. Таким образом, в приведенном выше сообщении говорится, что если HTTP_REFERER не содержит allowed-domain.ua
и содержит либо .ru
, либо .ua
и т. Д., Тогда возвращается 403 Запрещено.
Флаг 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]