Запретить рефералов со всех доменов, кроме одного - PullRequest
2 голосов
/ 05 марта 2012

Можно ли принимать трафик только из одного домена, в идеале, используя файл .htaccess? Я хочу, чтобы мой сайт был доступен только по ссылке на другой сайт, который у меня есть.

Я знаю, как заблокировать один ссылающийся домен, но не все домены

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC]
RewriteRule .* - [F]

это мой полный код переписывания:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !domain\.co.uk [NC]
RewriteRule .? - [F]

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Я думаю, что это работает, но ни один из ресурсов не загружается, и я получаю ошибку 500, когда нажимаю на другую ссылку.

1 Ответ

3 голосов
/ 05 марта 2012

Сделать что-то вроде:

RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !yourdomain\.com [NC]
RewriteCond %{HTTP_REFERER} !alloweddomain\.com [NC]
RewriteRule .? - [F]

Первый RewriteCond проверяет, что реферер не пуст. Второй проверяет, что он не содержит строку yourdomain.com, а третий проверяет, что он не содержит строку alloweddomain.com. Если все эти проверки пройдены, RewriteRule инициирует и отклоняет запрос.

(Как правило, разрешать пустые ссылки не рекомендуется, поскольку браузеры могут генерировать их по разным причинам, например, когда:

  • пользователь добавил в закладки ссылку,
  • пользователь ввел ссылку вручную в адресную строку,
  • пользователь перезагрузил страницу,
  • браузер настроен так, чтобы не отправлять информацию о ссылках между сайтами, или
  • прокси между вашим сайтом и браузером удаляет информацию о реферере.)
...