Разрешить пользователей только с определенного реферера (остальных перенаправить) - HTACCESS

Я пытался заблокировать доступ для всех, кто пытается увидеть страницу .php, не перейдя по моей конкретной ссылке отслеживания.

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

    RewriteEngine On
RewriteBase /

# allow these referers to passthrough
RewriteCond %{HTTP_REFERER} ^http://subdomain.domain.com
RewriteRule ^ - [L]

# redirect everything else
RewriteRule ^ http://anotherDomain.com/ [R,L]

это связано с тем, что http://subdomain.domain.com — это URL-адрес отслеживания, который перенаправляет на веб-сайт.php, но кажется это не работает, и, несмотря на любой реферер или даже ввод URL-адреса для веб-сайта.php непосредственно на панели инструментов, пользователь переходит на веб-сайт.php.

чего я хочу добиться, так это того, что только пользователи из subdomain.domain.com могут видеть web.php

заранее спасибо.


person Baldie47    schedule 30.06.2016    source источник


Ответы (2)


Вы можете сделать это, используя order deny,allow, поместите это в свой .htaccess:

order deny,allow
deny from all
allow from subdomain.domain.com

Это лишит доступа всех, кроме тех, кто заходит через subdomain.domain.com.

Затем, чтобы перенаправить пользователей, которые не приходят из subdomain.domain.com, вы можете использовать:

RewriteCond %{HTTP_HOST} !^www\.subdomain.domain\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/?(.*)         http://www.example.com/$1 [L,R,NE]

Для Апача 2.4:

Вы можете использовать директиву IF, так как вы используете 2.4:

<If "%{HTTP_HOST} != 'www.subdomain.domain.com'">
Redirect / http://www.example.com/
</If>

и для order deny,allow добавьте вокруг него следующее:

<Limit GET>
</Limit>
person Joe    schedule 30.06.2016
comment
хм... не работает, я получаю 403 на каждый запрос, даже если он исходит с subdomain.domain.com - person Baldie47; 30.06.2016
comment
Какую версию Apache вы используете? - person Joe; 30.06.2016
comment
httpd 2.4.18 (Юникс) - person Baldie47; 30.06.2016
comment
Поскольку вы используете версию 2.4, я добавил для вас редактирование альтернативного метода. Надеюсь, это поможет. - person Joe; 30.06.2016
comment
хорошо, теперь работает, но я только что обнаружил, что моя служба отслеживания выполняет DMR (двойное метаобновление), поэтому реферер становится пустым (я не знаю, почему в консоли разработчика я вижу реферера, но при ссылке на какой у меня реферальный сайт? Я вижу, что реферер пуст... Было бы здорово, если бы был способ присоединиться к обоим мирам, иметь DMR и блокировать людей, которые приходят из другого домена... - person Baldie47; 01.07.2016
comment
Можем ли мы сделать этот allow from subdomain.domain.com конкретным URL, а не доменом? Или более одного URL-адреса, или мы можем написать для него несколько правил? - person Hammad Khan; 02.10.2018

tl;dr

RewriteEngine On
RewriteCond "%{HTTP_REFERER}" "!your-valid-referer.example.com"
RewriteRule ^.*$ - [F]

Подробности

  • RewriteCond - сделать сравнение:
  • "%{HTTP_REFERER}" – текущий реферер на момент запрос; против:
  • "!your-valid-referer.example.com" - действующий реферер; а если нет:
  • RewriteRule ^.*$ - неважно какой;
  • [F] - не давать к нему доступ. Назначьте код состояния HTTP 403, также известный как Forbidden.

дело ОП

RewriteEngine On
RewriteCond "%{HTTP_REFERER}" "!subdomain.domain.com"
RewriteRule ^ http://anotherDomain.com/ [R,L]
person Abel Callejo    schedule 28.10.2020