Запретить переходы со всех доменов, кроме одного

Можно ли принимать трафик только с одного домена, в идеале с использованием файла .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, когда нажимаю на другую ссылку.


person user1059511    schedule 05.03.2012    source источник
comment
Я предполагаю, что `произошла ошибка копирования и вставки?   -  person Ilmari Karonen    schedule 06.03.2012


Ответы (1)


Сделайте это примерно так:

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

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

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

  • пользователь добавил ссылку в закладки,
  • пользователь ввел ссылку вручную в адресную строку,
  • пользователь перезагрузил страницу,
  • браузер настроен так, чтобы не отправлять информацию о переходах между сайтами, или
  • прокси между вашим сайтом и браузером удаляет информацию о реферере.)
person Ilmari Karonen    schedule 05.03.2012
comment
Большое спасибо за быстрый ответ, по какой-то причине я получаю ошибку 500. - person user1059511; 05.03.2012
comment
Затем проверьте журналы сервера, чтобы узнать, что вызывает ошибку 500. - person Ilmari Karonen; 05.03.2012
comment
так что это работает, но страница загружается без моих CSS и изображений - person user1059511; 06.03.2012
comment
Хорошо, очевидный вопрос: вы не забыли разрешить переходы со своего собственного домена, верно? - person Ilmari Karonen; 06.03.2012
comment
извините, это было очень глупо! теперь отлично работает, большое спасибо. - person user1059511; 06.03.2012
comment
одна странность, если ссылка на сайт есть в письме, она не блокируется. - person user1059511; 06.03.2012
comment
Ссылки из сообщений электронной почты (и других вещей, которые не являются веб-сайтами) - это еще одна ситуация, когда браузеры обычно не отправляют никакой информации о реферере по техническим причинам и из соображений конфиденциальности. - person Ilmari Karonen; 06.03.2012
comment
Спасибо! Я бы также хотел заблокировать пустые рефереры, но я думаю, что это остановит слишком много подлинных запросов. - person user1059511; 06.03.2012